0

我有一个典型的情况,我需要生成一批随机数。我使用了一个循环,每次通过都会生成 100 个随机数:

for(int i=0; i<npasses; i++)
{
   srand(time(NULL)); //Initialize seed

   for(int j=0; j<100; j++)
      printf("%d ", rand()%10);

   printf("\n"); //New line after 100 numbers
}

现在,内部循环在不到一毫秒的时间内执行。结果,time() 的值没有变化。这会将种子 (srand()) 重新初始化为相同的值,并且我的随机数被重复..

任何人都可以提出解决方法/修复方法。

4

4 回答 4

5

远离srand

srand(time(NULL)); //Initialize seed
for(int i=0; i<npasses; i++)
{
   for(int j=0; j<100; j++)
      printf("%d ", rand()%10);

   printf("\n"); //New line after 100 numbers
}
于 2013-05-16T10:41:30.670 回答
4

在循环之前设置一次种子。

于 2013-05-16T10:38:23.143 回答
-1

尝试这个

srand(clock()); //Initialize seed
于 2013-05-16T10:41:03.937 回答
-3

您可以使用随机生成器生成新种子。

例如:

srand((unsigned int)rand());

并且srand(time(NULL))在循环之前只使用一次。但正如另一个答案中所建议的那样,您也可以将整个srand内容放入循环中。

于 2013-05-16T10:36:39.443 回答