C++随机数重复的问题

来源:互联网 发布:svm算法推荐 编辑:程序博客网 时间:2024/04/30 10:06

 错误的产生:

#include<iostream>#include<time.h>#include<stdlib.h>using namespace std;int main(){//在循环中初始化种子,将会导致随机数重复for(int i=0;i<=10;i++){  srand((unsigned int)time(NULL));  cout<<rand()<<endl;}}

原因是因为,把随机数的seed初始化放在循环内部,将导致seed不断被执行初始化,而rand()函数是在第一次被初始化之后,随着每次调用都根据上一次的“随机数”来产生新的“随机数”。所以seed不断被初始化,那么rand()一直也在根据seed来产生第一个“随机数”,而现在的计算机,运行上面的程序根本不需要一秒,所以time(NULL)短时间内使一毛一样的。

还有和上面一毛一样的错误我也犯过-。-:

#include<iostream>#include<time.h>#include<stdlib.h>using namespace std;int xxx(){srand((unsigned int)time(NULL));for(int i=0;i<=10;i++){   /*---balabala中间一坨代码省略,反正就是递归-----*/  cout<<rand()<<endl;  xxx();}}

也作死的出现同样的错误,啊哈哈哈哈,我都怕了
所以别在同一时间用srand(time(0))函数初始化种子多次

0 0