A - Premier Anneau problème
#include <iostream> #include <cmath> #include <cstring> en utilisant l' espace de noms std; int n; int a [ 100 ]; int vis [ 100 ]; int num; int principal ( int c) { pour ( int m = 2 ; m <= sqrt (c); m ++ ) { si (c% m == 0 ) retourner 0 ; } Retour 1 ; } Vides DSF ( int i) { intil; int pavillon; si (i == n && premier (a [ 0 ] + a [n - 1 ])) { pour ( int m = 0 ; m <n; m ++ ) { si (m <n - 1 ) cout << a [m] << " " ; autre Cout << un [m]; } Cout << endl; retour ; } Pour ( int j = 2 ; j <= n; j ++ ) { il = a [i - 1 ] + j; drapeau = prime (il); si (vis [j] == 0 && drapeau) { vis [j] = 1 ; a [i] = j; dfs (i + 1 ); vis [j] = 0 ; } } Retour ; } Int main () { en (cin >> n) { Cout << " cas " << ++ num << " : " << endl; memset (a, 0 , sizeof(une)); memset (vis, 0 , sizeof (vis)); a [ 0 ] = 1 ; dfs ( 1 ); Cout << endl; } }
Le strict respect de ce problème modèle Xu dfs, résoudre le problème lorsqu'il est planté dans un état critique lorsque le jugement
Si le temps d'arrivée à la valeur initiale de i est 1, il sera déterminé quand il les nombres premiers i-1, donc un second numéro [1] est stocké, on suppose que quand on passe n est 6, quand i = 6, si pas entrer si la déclaration, un cas a été soumis à i est égal à 12.345 recherches, vis chaque tableau sera marqué, et le tableau est une position prédéterminée par rapport 2-6 au total cinq positions, à ce moment, nous avons plus de place et n'a pas entrer dans l'instruction if, dans ce cas i est == un état critique, l'idée est la suivante, et également mis en place la valeur initiale entrant spécifique de i et j sont liés
Il y a le problème du format de sortie nécessaire, avec un espace entre chacun des deux numéros, le dernier numéro sans espace, et chaque groupe après la fin de l'affaire à une ligne blanche, facile à négliger.