2011-10-02 8 views
-2

c'est juste question de curiosité, je pensais, que dans le cas où j'utilise au début de C++ fonction de fonction rand() srand(time(0)), il va générer tous les nombres aléatoires distincts, donc j'ai essayé ce qui se serait passé , quand sizeof array donné est beaucoup plus grand que le nombre d'éléments dans la plage des deux entiers donnés par exemple, quand array est déclaré comme int a [100], et range de nombres aléatoires de [15 75], je pensais que le code devrait donner moi erreur comme il y a plus de nombre que de distance ou quelque chose comme ça, mais ça a généré des valeurs répétées aléatoires pourquoi? voici le codenombre aléatoire répétée

#include <iostream> 
#include <cstdlib> 
#include <time.h> 
using namespace std; 

int main(){ 
    int min=15; 
    int max=75; 
    int a[100]; 

    srand(time(0)); 
    for (int i=0;i<100;i++) { 
     a[i]=min+rand()%(max-min+1);  
    } 

    for (int i=0;i<100;i++) { 
     cout<<a[i]<< " "; 
    } 
    return 0; 
} 
+10

"cela générera tous les nombres aléatoires distincts" - pourquoi pensez-vous que cela? – Howard

+0

Je ne comprends pas votre problème. Qu'Est-ce que c'est? –

+0

Pourriez-vous nous dire explicitement quel genre de séquence vous attendez? Apparemment, vous avez fait une mauvaise supposition, mais ce n'est pas clair de voir où. – leftaroundabout

Répondre

3

Il semble que ce que vous voulez réellement est une liste de nombres uniques mais dans un ordre aléatoire? C'est une histoire complètement différente de la génération de nombres pseudo-aléatoires.

Dans ce cas, vous pouvez générer le tableau d'abord comme ceci:

std::vector<int> myNumbers; 
myNumbers.reserve(50); 
int i = 25; 
std::generate_n(back_inserter(myNumbers),50,[&i]() { return i++; }); 

Et puis mélangez-le comme ceci:

std::random_shuffle(myNumbers.begin(), myNumbers.end()); 

Notez que la plupart du temps vous devriez interroger le générateur aléatoire avant Appeler shuffle car il générera en interne des nombres aléatoires pour faire le brassage.

Dans votre exemple, vous remplissez simplement un tableau (de 100 éléments) avec des nombres aléatoires compris entre 25 et 75. Cela donnera à coup sûr des chiffres répétés, il y a même une (petite) chance que vous obteniez toujours le même nombre, tout comme il y a une chance que vous puissiez lancer '6' 100 fois avec un dé juste. Vous venez de lancer un (très gros) dé, mettez le premier résultat dans la fente [0], roulez à nouveau, mettez le dans [1], .... Il n'y a pas d'état, donc le même nombre peut et sera répété.