多次调用C ++随机数生成器

时间:2015-03-25 03:53:38

标签: c++ random srand

您好我的随机数生成器在每次运行时都给出了相同的序列(序列是不同的)数字。这是一个简化的代码,用于演示我的问题。

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int random(){
    srand(time(0));
    return(1+rand() % 6);
}
int main(){
    cout<< random() <<endl;
    cout<< random() <<endl;
} // will return a repeated double digit i.e. 11, 22, 33, 44

2 个答案:

答案 0 :(得分:3)

rand()是&#39;伪随机&#39;发电机。这意味着它使用数学函数从前一个值生成下一个值。

srand()设置初始&#39;种子&#39;随后调用&#39; rand()&#39;的值。如果您播种相同的值,您将得到相同的随机序列。如果你用当前时间播种,那么序列每秒都会不同。

只打电话一次:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int random(){
    return(1+rand() % 6);
}

int main(){
    srand(time(0));

    cout<< random() <<endl;
    cout<< random() <<endl;
}

答案 1 :(得分:0)

srand()为随机生成器播种。 rand()是一种基于种子生成随机数的算法。因此,您只需在程序中调用srand()一次即可。继续阅读更多......

此外,rand()的后续调用将自动生成不同的数字。 e.g。

while (1){
    printf("%d ",rand()%100);
}

将打印一个全部不同的数字列表,例如5 34 65 23 56 ...

在您实施之前,请注意time(NULL)每秒更新一次。相反,在int main(){开始时添加srand(time(NULL));一次。

祝你好运!