我基本上是在尝试构建一个使用标准 52 张纸牌的赌场游戏创意的计算机模拟。
我想一次运行 1000 场比赛。
我之前使用过 srand(time(NULL)) ,但我认为不可能一次输出 1000 个不同的随机数序列,是吗?我的看法是,由于所有数字都是同时生成的,所以它们都是相同的。
有没有办法使用第一个生成的随机数来播种 1000 个新的 52 个数字序列?
谢谢
是的,您可以让您的第一个随机数生成器(以 为种子time(NULL)
)输出 1000 个随机数,每个随机数都可以用作 1000 个单独的随机数生成器的种子。
我的看法是,由于所有数字都是同时生成的,所以它们都是相同的
它们不是同时生成的。我想你正在使用 for 循环?每次迭代都不在同一时间”。
你甚至测试过这个理论吗?
for i = 1 to 1000 do
{
print <time to ms resolution>
print <random number>
}
使用相同数字播种将始终导致相同的伪随机数序列。只要您不在迭代之间重新播种相同的种子,(子)序列就不会相同。
尝试用 . 播种 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();
}