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