Como gerar números randoms diferentes em um loop em C ++?

É possível gerar um número random diferente, toda vez que o loop é executado. Por exemplo, eu tenho:

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

Mas o problema é que ele gera o mesmo número random toda vez. É possível gerar números randoms diferentes toda vez que o loop é executado?

Existe alguma possibilidade de redefinir a boot do número random também?

    Não use o srand dentro do loop, use-o apenas uma vez, por exemplo, no início do main() . E srand() é exatamente como você redefine isso.

    Você está recebendo o mesmo número random a cada vez, porque está definindo uma semente dentro do loop. Mesmo que você esteja usando time() , ele só muda uma vez por segundo, então se o loop for completado em um segundo (o que provavelmente acontecerá), você obterá o mesmo valor de semente de cada vez e o mesmo número random inicial.

    Mova a chamada srand() para fora do loop (e chame-a apenas uma vez, no início do seu aplicativo) e você deverá obter números “randoms” randoms.

    Não use rand() ; use novos resources do C ++ 11 (por exemplo, std::mt19937 , std::uniform_int_distribution , etc.).

    Você pode usar um código como este ( ao vivo aqui no 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

    Considere assistir a este vídeo da conferência Going Native 2013 para obter mais detalhes sobre problemas relacionados ao rand() :

    rand () considerado prejudicial

    Tente mover o seed srand fora do loop da seguinte forma:

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

    Como Mark Ransom diz no comentário, mover a semente para fora do loop só ajudará se o loop não estiver residindo em uma function que você está chamando várias vezes.

    Eu tive esse mesmo problema por dias. Manter o srand () fora do loop é um +. Além disso, não atribua rand ()% 100 a nenhuma variável. Simplesmente cout rand ()% 100 no loop. Tente isto:

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

    Pare de semear o gerador todas as vezes. Puxe a chamada srand do loop

    Mova a chamada srand para o início do programa. Como você tem agora, o tempo pode ser o mesmo entre duas chamadas consecutivas, então o gerador de números randoms começará novamente no mesmo ponto.

    Você precisa extrair o initilization do time () do loop for.

    Aqui está um exemplo que será exibido no número random esperado do console do Windows (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; } 

    A function time provavelmente retorna o mesmo valor durante cada iteração do loop.

    Tente inicializar a semente aleatória antes do loop.

    Cada iteração você está redefinindo a seqüência de números pseudo-randoms porque você está chamando srand com a mesma semente (desde que a chamada para o time é tão freqüente). Use uma semente diferente ou chame srand uma vez antes de entrar no loop.

    Se você tem randoms no início do programa, você pode multiplicar a variável loop pelo tempo – para obter uma melhor distribuição. Por exemplo

     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 

    Bem, eu não sou um profissional em C ++, mas aprendi na escola. Estou usando esse algoritmo há 1 ano para armazenar diferentes valores randoms em uma matriz 1D, mas isso também funcionará na matriz 2D após algumas alterações. Qualquer sugestão sobre o código é bem vinda.

    Não conheço homens. Eu encontrei o melhor caminho para mim depois de testar diferentes maneiras, como 10 minutos. (Altere os números no código para obter números randoms grandes ou pequenos.)

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