播种随机数发生器不工作

时间:2015-11-28 22:38:47

标签: c++ random

我有一个使用随机生成器创建多维数据集的c ++程序。要创建多维数据集,我有:

void generateSquare() {
  int num = 0;
  srand(time(NULL));

  for (int r = 0; r < MSQUARE; r++) {
    for (int c = 0; c < MSQUARE; c++) {
      do {
        num = (rand() % (MSQUARE * MSQUARE)) + 1;
      } while (!checkUnique(num));
      cube[r][c] = num;
    }
  }
}

它只允许生成一个数字。然后将此函数包装在do..while循环中,这样如果正方形不满足特定条件,则会生成一个新的正方形,直到生成满足条件的正方形为止。

问题在于它不断地反复生成相同的方块。我认为srand(time(NULL))将为rand()函数设定种子,这样每次调用时它都会生成不同的随机数,以创建一个新的唯一正方形,但看起来似乎没有发生。

void checkSquare() {
  do {
    generateSquare();
  } while (!perfect);
}

这不是实际的do ... while循环,但可以让你了解它是如何被调用的。

如何确保种子每次都是独一无二的?

2 个答案:

答案 0 :(得分:2)

您应该在程序开头只调用srand一次。种子始终相同的原因是因为time返回了几秒钟。由于你在一个循环中调用它,它总是具有相同的值(直到一秒钟过去)。

此外,如果你可以使用C ++ 11或更高版本,你应该查看标准库中的pseudo-random number generation

答案 1 :(得分:0)

srand设置rand函数的种子。如果将其设置为特定数字,它将始终返回相同的数字序列。如果要测试程序,则使用此方法,否则使用rand()而不使用srand()。

http://www.cplusplus.com/reference/cstdlib/srand/