3

我基本上是在尝试构建一个使用标准 52 张纸牌的赌场游戏创意的计算机模拟。

我想一次运行 1000 场比赛。

我之前使用过 srand(time(NULL)) ,但我认为不可能一次输出 1000 个不同的随机数序列,是吗?我的看法是,由于所有数字都是同时生成的,所以它们都是相同的。

有没有办法使用第一个生成的随机数来播种 1000 个新的 52 个数字序列?

谢谢

4

4 回答 4

1

是的,您可以让您的第一个随机数生成器(以 为种子time(NULL))输出 1000 个随机数,每个随机数都可以用作 1000 个单独的随机数生成器的种子。

于 2012-12-12T06:42:53.380 回答
1

我的看法是,由于所有数字都是同时生成的,所以它们都是相同的

它们不是同时生成的。我想你正在使用 for 循环?每次迭代都不在同一时间”。

你甚至测试过这个理论吗?

for i = 1 to 1000 do
{
  print <time to ms resolution>
  print <random number>
}
于 2012-12-12T06:46:05.570 回答
0

使用相同数字播种将始终导致相同的伪随机数序列。只要您不在迭代之间重新播种相同的种子,(子)序列就不会相同。

于 2012-12-12T06:43:34.093 回答
0

尝试用 . 播种 rand() 函数srand(time(NULL)*getpid())。您调用 1000 次的进程的 PID 应该取决于系统,并且很有可能彼此不同。

如果您将线程用于不同的游戏,请使用 threadID 而不是 getpid()。

如果您愿意,您可以一次预先生成所有随机数并在以后使用它们:

int random_numbers[1000];
for (i = 0; i < 1000; i++) {
    srand(time(NULL)*(i+1));
    random_numbers[i] = rand();
}
于 2012-12-12T06:46:48.227 回答