可能重复:
如何在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);
}
Run Code Online (Sandbox Code Playgroud)
输出将始终是一系列重复的数字,如22222222或11111111.如何让它产生八个随机数?
您的代码存在问题:
for(int i=0;i<len;i++)
{
srand ( time(NULL) );
cout <<(test[i]=rand()%10);
}
Run Code Online (Sandbox Code Playgroud)
问题在于,在循环的每次迭代中,您将使用当前系统时间重新定位随机数发生器,通常以第二精度测量.每当你为随机数发生器提供一个种子时,它会重置被传回的随机值序列,所以如果你一直在为随机发生器播放相同的值,然后rand每次重新播种它只调用一次,你就会一遍又一遍地取回相同的随机数序列.由于系统时间每秒只改变一次,因此将重复产生相同的数字序列.
要解决此问题,请将调用srand移出循环,如下所示:
srand ( time(NULL) );
for(int i=0;i<len;i++)
{
cout <<(test[i]=rand()%10);
}
Run Code Online (Sandbox Code Playgroud)
这样,您只对种子随机发生器播种一次,因此您的序列看起来应该更加伪随机.您可能仍会看到一些重复值,但这可能是由于偶然而非随机数生成器确定性地起作用.
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |