可能重复:
how to generate different random number in a loop in C++?
在此代码中:
int Randtest(int len)
{
int test[100]={};
for(int i=0;i<len;i++)
{
srand ( time(NULL) );
cout <<(test[i]=rand()%10);
}
}
int main()
{
Randtest(8);
}
输出将始终是重复数字的序列,例如22222222
或11111111
。如何让它产生8个随机数?
答案 0 :(得分:6)
您的代码存在问题:
for(int i=0;i<len;i++)
{
srand ( time(NULL) );
cout <<(test[i]=rand()%10);
}
问题在于,在循环的每次迭代中,您将使用当前系统时间重新定位随机数发生器,通常以第二精度测量。每次向随机数发生器提供种子时,它都会重置随机值的序列,因此如果你一直在为随机发生器重复播放相同的值,那么每次重新调整时只调用rand
一次它,你会一遍又一遍地回到相同的随机数序列。由于系统时间每秒只改变一次,因此会重复产生相同的数字序列。
要解决此问题,请将调用移至srand
,如下所示:
srand ( time(NULL) );
for(int i=0;i<len;i++)
{
cout <<(test[i]=rand()%10);
}
这样,您只需对随机数发生器播种一次,因此您的序列看起来应该更加伪随机。您可能仍然会看到一些重复值,但这可能是由于偶然而非随机数生成器确定性地起作用。
答案 1 :(得分:2)
srand
在当前时间启动随机数生成器,由time(NULL)
给出。
你的循环运行得如此之快,以至于每次通过循环都没有改变时间,你继续将随机数生成器重置为相同的起点。
答案:使用srand
ONCE ,只需使用一次, 在之外循环。
答案 2 :(得分:0)
在循环的每次迭代中以相同的值退出重新播种。只需在main
中完成。