Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一次生成1000张随机牌组洗牌c++;_C++_Srand - Fatal编程技术网

C++ 一次生成1000张随机牌组洗牌c++;

C++ 一次生成1000张随机牌组洗牌c++;,c++,srand,C++,Srand,我基本上是在尝试建立一个赌场游戏想法的计算机模拟,它使用一副标准的52张牌 我想一次跑1000场比赛 我以前使用过srand(time(NULL)),但我不认为用它一次可以输出1000个不同的随机数序列,是吗?我的看法是,由于所有的数字都是在同一时间生成的,所以它们都是相同的 有没有办法使用第一个生成的随机数来播种1000个新的52个数字序列 谢谢是的,您可以让您的第一个随机数生成器(使用时间(NULL)种子)输出1000个随机数,每个随机数都可以用作1000个独立随机数生成器的种子。使用相同的

我基本上是在尝试建立一个赌场游戏想法的计算机模拟,它使用一副标准的52张牌

我想一次跑1000场比赛

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

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


谢谢

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

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

我的看法是,由于所有数字都是在同一时间生成的 时间,他们都将是一样的

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

你有没有测试过这个理论

for i = 1 to 1000 do
{
  print <time to ms resolution>
  print <random number>
}
对于i=1到1000 do
{
印刷品
印刷品
}
尝试在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();
}
int随机数[1000];
对于(i=0;i<1000;i++){
srand(时间(空)*(i+1));
随机数[i]=rand();
}

srand
生成一个随机数序列。它只在您重新设定种子时或它碰巧再次生成该序列中的下一个数字时打印相同的数字。考虑使用C++11的随机数生成器?这最终等于从原始种子生成1000个数字。将伪随机种子设置为from伪随机发生器没有什么意义。正如spook所说,完全没有必要。如果在迭代之间不重新设定种子,你会得到一个不同但同样随机的结果。我不认为有任何理由使用伪随机数作为伪随机发生器的种子。什么迭代?OP需要1000个并行随机数rators。在随机数生成方面依赖系统架构似乎不是一个好主意。使用当前时间或滴答数作为随机种子应该总是足够好的-使用相同种子生成两个序列的概率比再次获得相同PID或TID的概率小得多(特别是当操作系统重用ID时,我相信它确实如此)。@Spook:我并不是完全依赖于系统arch。我使用它是为了增加随机性。请注意time()和PID()的组合:
srand(time(NULL)*getpid())
time(NULL)
。如果进程同时启动,PID()必须不同。否则,time()将不同。我自己也遇到过类似的问题,即生成随机文件名,其中,
srand(time(NULL));sprintf(outFileName,“%ld%d.tmp”,(long)time(NULL),(rand()%100000));
用于生成相同的文件名!