Как сгенерировать разные случайные числа в цикле в C ++?

Можно ли генерировать разные случайные числа, каждый цикл цикла. Например, у меня есть:

for (int t=0;t<10;t++) { int random_x; srand ( time(NULL) ); random_x = rand() % 100; cout<<"\nRandom X = "<<random_x; } 

Но проблема в том, что каждый раз генерирует одинаковое случайное число. Можно ли генерировать разные случайные числа каждый цикл цикла?

Есть ли возможность перезагрузить случайную инициализацию чисел?

Не используйте srand внутри цикла, используйте его только один раз, например, в начале main() . И srand() – это именно то, как вы сбросили это.

Вы получаете одинаковое случайное число каждый раз, потому что вы устанавливаете семя внутри цикла. Несмотря на то, что вы используете time() , он меняется только один раз в секунду, поэтому, если ваш цикл завершается за секунду (что, скорее всего, будет), вы получите одно и то же начальное значение каждый раз и одно и то же начальное случайное число.

Переместите вызов srand() за пределы цикла (и вызовите его только один раз, в начале вашего приложения), и вы должны получить случайные «случайные» номера.

Не используйте rand() ; вместо этого используйте новые объекты C ++ 11 (например, std::mt19937 , std::uniform_int_distribution и т. д.).

Вы можете использовать такой код ( живите здесь, на Ideone ):

 #include  #include  using namespace std; int main() { // Random seed random_device rd; // Initialize Mersenne Twister pseudo-random number generator mt19937 gen(rd()); // Generate pseudo-random numbers // uniformly distributed in range (1, 100) uniform_int_distribution<> dis(1, 100); // Generate ten pseudo-random numbers for (int i = 0; i < 10; i++) { int randomX = dis(gen); cout << "\nRandom X = " << randomX; } } 

PS

Рассмотрите возможность просмотра этого видео с конференции Going Native 2013 для получения более подробной информации о связанных с rand() проблемах:

Ранд () считается вредным

Попробуйте переместить семя srand вне цикла так:

 srand ( time(NULL) ); for (int t=0;t<10;t++) { int random_x; random_x = rand() % 100; cout<< "\nRandom X = "< 

Как отмечает Марк Рэнсом в комментарии, перемещение семени за пределы цикла поможет только в том случае, если цикл не находится в функции, которую вы вызываете несколько раз.

У меня была такая же проблема в течение нескольких дней. Сохранение srand () из цикла равно +. Кроме того, не назначайте rand ()% 100 любой переменной. Просто cout rand ()% 100 в цикле. Попробуй это:

  srand (time(NULL)); (int t=0;t<10;t++) { cout << rand() % 100 << endl; } 

Остановите посев генератора каждый раз. Вытяните вызов srand из цикла

Переместите вызов srand в начало программы. Поскольку у вас есть это сейчас, время может быть одинаковым между двумя последовательными вызовами, поэтому генератор случайных чисел начнет снова в том же месте.

Вам нужно извлечь инициализацию time () из цикла for.

Вот пример, который будет выводиться в ожидаемом (ahah) случайном числе в консоли Windows.

 #include  #include  #include "time.h" int main(int argc, char*argv[]) { srand ( time(NULL) ); for (int t = 0; t < 10; t++) { int random_x; random_x = rand() % 100; std::cout << "\nRandom X = " << random_x << std::endl; } Sleep(50000); return 0; } 

Функция времени, вероятно, возвращает одно и то же значение во время каждой итерации цикла.

Попробуйте инициализировать случайное семя перед циклом.

На каждой итерации вы возвращаете последовательность псевдослучайных чисел, потому что вы вызываете srand с одним и тем же семенем (так как время вызова так часто бывает). Либо используйте другое семя, либо вызовите srand один раз, прежде чем вводить цикл.

Если у вас раннее участие в программе, вы можете умножить переменную цикла на время – чтобы обеспечить лучшее распространение. Например

 for (int t = 0; t < 10; t++){ srand(time(NULL)*t); random = rand() % GetScreenWidth(); } 
 /*this code is written in Turbo C++ For Visual Studio, code is in comment*/ int a[10],ct=0,x=10,y=10; //x,y can be any value, but within the range of //array declared randomize(); //there is no need to use this Visual Studio for(int i=0;i<10;i++) { a[i]=random(10); //use a[i]=rand()%10 for Visual Studio } cout<<"\n\n"; do { ct=0; for(i=0;i 

Ну, я не профессионал на C ++, но изучил его в школе. Я использую этот алгоритм в течение 1 года для хранения различных случайных значений в массиве 1D, но это также будет работать в 2D-массиве после некоторых изменений. Любые предложения по поводу кода приветствуются.

Не знаю мужчин. Я нашел лучший способ для меня после тестирования разных способов, таких как 10 минут. (Измените номера в коде, чтобы получить большое или маленькое случайное число.)

  int x; srand ( time(NULL) ); x = rand() % 1000 * rand() % 10000 ; cout< 
Давайте будем гением компьютера.