マウスをクリックするたびに乱数の新しいセットを作成するプログラムがあります。srand なしでプログラムを実行すると ( time(NULL) ); 数字は毎回同じです。プログラムを WITH srand ( time(NULL) ); で実行すると、その後、クリックをスパムする可能性があり、数字が繰り返されます。どうすればこれを回避できますか?
質問する
985 次
2 に答える
4
あなたの問題は、乱数ジェネレーターに同じ値をシードすることです。このsrand
関数は、いわゆる「シード」を初期化するためのものです。シードを使用して、一連の同じ乱数を生成できます。
最初にジェネレーターを初期化する必要があり、次にrand
引数なしで関数を呼び出すだけで、乱数が生成されます。例えば:
/* initialize random seed with actual date-time */
std::srand(std::time(NULL));
/* generate ten random number lower than 10 */
int random, times = 10;
while(times){
random = std::rand() % 10;
times--;
}
「スパム クリック」について:std::time(NULL)
精度は秒単位であるため、同じ秒内にクリックすると、同じ値でランダム シードが初期化されます。
公式の c++ リファレンスサイトの例と、cplusplus.com の別の例を次に示します。
于 2012-10-14T20:52:02.373 に答える
0
rand
関数は乱数を生成するのが得意ではありません。 を見てくださいboost::random
。それは素晴らしく、乱数と半乱数を作成できます
于 2012-10-14T00:22:49.980 に答える