Générer 8 nombres aléatoires uniques de 0 à 7

Je fais un script simple qui génère 8 valeurs aléatoires de 0 à 7 et les stocke dans un tableau nommé random_numbers .

C’est mon essai:

 int main(int argc, char** argv) { int random_numbers[8]; srand((unsigned)time(NULL)); for (int i = 0; i < 8; i++) { random_numbers[i] = 1+ rand() % 8; cout << random_numbers[i] << endl; } return 0; } 

Cela me donne des valeurs répétées. Je voudrais avoir random_numbers rempli de valeurs aléatoires de 0 à 7, mais sans aucun nombre répété.

Comment puis je faire ça?

Générez les nombres de 0 à 7, puis mélangez-les. En supposant qu’il std::random_shuffle C ++ et non de C (à cause du cout ), utilisez std::random_shuffle :

 #include  #include  #include  int main() { int a[8] = {0, 1, 2, 3, 4, 5, 6, 7}; std::srand(unsigned(std::time(0))); std::random_shuffle(a, a + 8); for (int i=0; i<8; i++) std::cout << a[i] << " "; std::cout << std::endl; } 

Soyez averti: cppreference.com indique que "le générateur de nombres aléatoires est défini par l'implémentation, mais que la fonction std::rand est souvent utilisée." J'ai semé ça avec std::srand , mais apparemment ce n'est pas complètement portable.

 #include  #include  #include  #include  using namespace std; class Random { public: Random(){ srand( static_cast(time(NULL))); } unsigned int operator()(unsigned int max){ double tmp = static_cast( rand() ) / static_cast( RAND_MAX ); return static_cast( tmp * max ); } }; int main(int argc, char** argv) { int random_numbers[8]; int size = sizeof(random_numbers)/sizeof(int); for(int i=0;i 

Puisque vous utilisez c ++ de quelque manière que ce soit, je vous ai un peu plus modifié. Utilisez vector au lieu de array, cela devrait vous rendre la vie plus facile, et cela génère 0-7 dans un ordre aléatoire sans duplicata:

comstackr avec -std=c++0x

 #include  #include  #include  #include  using namespace std; int main(int argc, char** argv) { srand(time(NULL)); vector random_numbers(8); iota(random_numbers.begin(), random_numbers.end(), 1); random_shuffle(random_numbers.begin(), random_numbers.end()); for (unsigned i = 0; i < random_numbers.size(); i++) { cout << random_numbers[i] << endl; } return 0; } 

essayez ce code:

 int random_numbers[8]; int main(int argc, char** argv) { srand((unsigned)time(NULL)); for (int i = 0; i < 8; i++) { random_numbers[i] =getRand(i); cout << random_numbers[i] << endl; } return 0; } int getRand(int entries) { int flag = 0; int randno ; randno = rand() % 8; for(int i=0;i