3

私は基本的に、52 枚のカードの標準的なデッキを使用するカジノ ゲームのアイデアのコンピューター シミュレーションを構築しようとしています。

一度に 1000 ゲームを実行したいと考えています。

以前に srand(time(NULL)) を使用したことがありますが、これで一度に 1000 個の異なる乱数シーケンスを出力することはできないと思いますか? 私の認識では、すべての数値が同時に生成されるため、それらはすべて同じになります。

最初に生成された乱数を使用して、1000 個の新しい 52 個の数列をシードする方法はありますか?

ありがとう

4

4 に答える 4

1

私の認識では、すべての数値が同時に生成されるため、それらはすべて同じになります。

それらは同時に生成されません。forループを使用していると思いますか?各反復は同時にではありません。」

この理論をテストしましたか?

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

はい、最初の乱数発生器 ( でシードtime(NULL)) に 1000 個の乱数を出力させることができます。各乱数は、1000 個の個別の乱数発生器のシードとして使用できます。

于 2012-12-12T06:42:53.380 に答える
0

rand() 関数に をシードしてみてくださいsrand(time(NULL)*getpid())。1000 回呼び出すプロセスの PID はシステムに依存する必要があり、互いに異なる可能性が高くなります。

別のゲームでスレッドを使用している場合は、getpid() の代わりに threadID を使用してください。

必要に応じて、すべての乱数を一度に事前生成し、後で使用できます。

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 に答える
0

同じ数でシードすると、常に同じ疑似乱数のシーケンスになります。反復の間に同じシードを再シードしない限り、(サブ) シーケンスは同じにはなりません

于 2012-12-12T06:43:34.093 に答える