comment faire un nombre de génération aléatoire entre 1 et 9 sans répétition

Je recherche sur ce problème dans le site et l’un d’entre eux m’aide un peu. Je veux faire un puzzle avec un nombre aléatoire compris entre 1 et 9 et j’utilise cette méthode:

#include  #include  #include  int main() { int i = 1, num[9] = {1,2,3,4,5,6,7,8,9}, k = 1; srand(time(NULL)); for (i = 1; i < 10; i++) { num[i] = i; } for (i = 1; i < 10; i++) { int j = i + rand()%(10 - i); int temp = num[i]; num[i] = num[j]; num[j] = temp; if ((i - 1) % 3 == 0) { printf(" %i: ", k); k++; } printf(" %i", num[i]); if (i % 3 == 0) { printf("\n"); } } return 0; } 

mais j’ai un problème avec ce code.it rend les deux derniers chiffres identiques !!! Quelqu’un peut-il m’aider ??

Vous pouvez générer une plage unique de nombres aléatoires comme celle-ci. Cela fonctionne en créant un pool de tous les numéros disponibles, en sélectionne un au hasard, puis supprime ce numéro du pool. La même méthode pourrait être utilisée pour dissortingbuer un jeu de cartes, sans qu’il soit nécessaire de mélanger explicitement.

 #include  #include  #include  #define RANGE 9 // range of numbers int main() { int pool[RANGE]; int size, n; for (size=0; size 

Voici aussi une version déboguée de votre programme. Hormis une mauvaise indexation de tableau, votre erreur a été d’imprimer à partir du tableau avant la fin de la randomisation.

 #include  #include  #include  int main() { int i = 1, num[9] = {1,2,3,4,5,6,7,8,9}; srand((unsigned)time(NULL)); for (i=0; i<9; i++) { int j = rand() % 9; int temp = num[i]; num[i] = num[j]; num[j] = temp; } for (i=0; i<9; i++) { if (i % 3 == 0) printf("\n %d: ", 1+i/3); printf(" %i", num[i]); } printf("\n"); return 0; } 

La réponse de @Weather Vane est efficace en termes de temps, mais si vous devez conserver la séquence aléatoire au lieu de simplement la sortir, vous aurez besoin d’un second tableau pour copier les données. Ce qui suit mélange les données “sur place”:

 #include  #include  void shuffle( int* pack, int length ) { int i ; // Initialise pack for( i = 0; i < length; i++ ) { pack[i] = i + 1 ; } // Swap random pairs for( i = 0; i < length; i++ ) { int n = rand() % length ; int m = rand() % length ; int h = pack[n] ; pack[n] = pack[m] ; pack[m] = h ; } } #define PACK_LENGTH 9 int main(void) { int i ; int pack[PACK_LENGTH] ; srand( time(0) ) ; // Create and shuffle the pack shuffle( pack, pack_length ) ; // Print the pack for( i = 0; i < pack_length; i++ ) { printf( "%d ", pack[i] ) ; } return 0; }