¿Cómo generar diferentes números aleatorios en un bucle en C ++?

¿Es posible generar un número aleatorio diferente cada vez que se ejecuta un ciclo? Por ejemplo, tengo:

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

Pero el problema es que genera el mismo número aleatorio cada vez. ¿Es posible generar diferentes números aleatorios cada vez que se ejecuta un ciclo?

¿Hay alguna posibilidad de restablecer la inicialización de números aleatorios también?

No use srand dentro del bucle, utilícelo solo una vez, por ejemplo, al comienzo de main() . Y srand() es exactamente cómo restablecer esto.

Obtendrá el mismo número aleatorio cada vez, porque está estableciendo una semilla dentro del ciclo. Aunque estés usando time() , solo cambia una vez por segundo, por lo que si el ciclo se completa en un segundo (lo que probablemente ocurra), obtendrás el mismo valor inicial cada vez y el mismo número aleatorio inicial.

Mueva la llamada srand() fuera del ciclo (y llámelo solo una vez, al comienzo de su aplicación) y obtendrá números aleatorios “aleatorios”.

No use rand() ; en su lugar, use las nuevas instalaciones de C ++ 11 (por ejemplo, std::mt19937 , std::uniform_int_distribution , etc.).

Puede usar un código como este (en vivo aquí en 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; } } 

PD

Considera mirar este video de la conferencia Going Native 2013 para más detalles sobre los problemas relacionados con rand() :

rand () considerado dañino

Intenta mover el siembra de semillas fuera del ciclo de la siguiente manera:

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

Como dice Mark Ransom en el comentario, mover la semilla fuera del ciclo solo ayudará si el ciclo no está residiendo en una función a la que está llamando varias veces.

Tuve este mismo problema por días. Mantener srand () fuera del ciclo es un +. Además, no asigne rand ()% 100 a ninguna variable. Simplemente cout rand ()% 100 en el ciclo. Prueba esto:

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

Deje de sembrar el generador todo el tiempo. Saca el srand call del bucle

Mueva el srand call al inicio del progtwig. Como lo tiene ahora, el tiempo puede ser el mismo entre dos llamadas consecutivas, por lo que el generador de números aleatorios comenzará de nuevo en el mismo lugar.

Necesita extraer la inicialización de time () fuera del ciclo for.

Aquí hay un ejemplo que generará en la consola de Windows un número aleatorio esperado (ahah).

 #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; } 

La función de tiempo probablemente devuelve el mismo valor durante cada iteración del ciclo.

Intente inicializar la semilla aleatoria antes del ciclo.

En cada iteración está restableciendo la secuencia de números pseudoaleatorios porque llama a srand con la misma semilla (ya que la llamada al time es tan frecuente). O use una semilla diferente, o llame a srand una vez antes de ingresar al ciclo.

Si tiene randoms desde el principio del progtwig, puede multiplicar la variable de bucle por el tiempo para ofrecer una mejor distribución. Por ejemplo

 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 

Bueno, no soy un profesional en C ++, pero lo aprendí en la escuela. Estoy usando este algoritmo durante el último año para almacenar diferentes valores aleatorios en una matriz 1D, pero esto también funcionará en la matriz 2D después de algunos cambios. Cualquier sugerencia sobre el código es bienvenida.

No conozco a los hombres Encontré la mejor manera para mí después de probar diferentes formas, como 10 minutos. (Cambie los números en el código para obtener un número aleatorio grande o pequeño).

  int x; srand ( time(NULL) ); x = rand() % 1000 * rand() % 10000 ; cout<