如何确保rand()不再选择一组点

时间:2012-04-19 16:02:16

标签: algorithm random random-sample

我正在编写一个代码,对一组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组。

问:有关如何改善情况的任何建议?

1 个答案:

答案 0 :(得分:3)

您应该将呼叫移出srand。像这样:

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

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

尽管如此,这并不能保证不会重复一组数字。但是,它会使复制品的可能性大大降低。