一次生成1000个随机卡片组shuffle c ++

时间:2012-12-12 06:40:09

标签: c++ srand

我基本上试图建立一个赌场游戏理念的计算机模拟,使用标准的52张牌。

我想一次运行1000场比赛。

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

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

由于

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

  

我的感觉是,因为所有数字都是相同的   时间,他们都将是相同的

他们同时生成。我认为你正在使用for循环?每次迭代都不是 在同一时间“。

你有没有测试过这个理论?

for i = 1 to 1000 do
{
  print <time to ms resolution>
  print <random number>
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

int random_numbers[1000];
for (i = 0; i < 1000; i++) {
    srand(time(NULL)*(i+1));
    random_numbers[i] = rand();
}