Saltar al contenido

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

Solución:

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

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

Mueve el srand() llame fuera del ciclo (y llámelo solo una vez, al inicio de su aplicación) y debería obtener números “aleatorios” aleatorios.

Hacer no usar rand(); utilizar las nuevas instalaciones de C ++ 11 (p. ej. std::mt19937, std::uniform_int_distribution, etc.) en su lugar.

Puedes usar un código como este (vivir aquí en Ideone):

#include <iostream>
#include <random>
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

Considere ver este video de la conferencia Going Native 2013 para obtener más detalles sobre rand()-problemas relacionados:

rand () Considerado nocivo

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *