2

我正在编写一个对一组 4 个数字执行随机扫描的代码。我想扫描 10000 个点(数百万后)。我刚刚了解了 rand(),所以这里是相关部分:

int numPoints = 10000;
double A,B,C,D;
 for (i=0; i<=numPoints1;i++) {

                srand ( time(NULL) );
                A = rand() % 500 + 100;
                B = rand() % 500 + 100;
                C = rand() % 100 - 100;        
                D = rand() % 5 + 2.5; 

然后将这四个变量输入一个函数(A,B,C,D)。代码在循环内执行一些检查和计算。

 }

但是,我在输出文件中注意到很多时候,选择了同一组 A、B、C、D。

问:关于如何改善这种情况有什么建议吗?

4

1 回答 1

3

您应该将调用srand移出循环。像这样:

srand(time(NULL));
for (i = 0; i <= numPoints1; i++)
{
   ...
}

发生的事情是您在每次迭代时重新初始化随机数生成器。我记得,time以秒数返回时间。所以time(NULL)每秒只会更改一次,这意味着您将多次使用相同的种子播种随机数。

也就是说,这并不能保证一组数字不会重复。但是,它会使重复的可能性大大降低。

于 2012-04-19T16:12:53.290 回答