ループ処理での乱数生成
現在モンティーホール問題を実装していますが、ループ処理のところで全て同じ値になってしまいます。
実装
以下のようなコードを書いています。
forでのループ処理で都度乱数を生成して各ループで異なる結果を出したいのですが、
出力がwin_count = 10000, lose_count = 0
のようになってしまいます。おそらく1度目の結果をそのまま返してしまっています
記載コードはドアを変えない場合のシミュレーションです。
C++
1#include<iostream> 2#include <stdlib.h> // rand, srand関数 3#include <time.h> // time関数 4using namespace std; 5 6// 0:ひつじ, 1:くるま 7int door[3] = {0, 0, 1}; 8int choose_num; 9int win_count = 0; 10int lose_count = 0; 11 12// ドアを開ける 13int choose_door() { 14 // 乱数を生成してreturn 15 unsigned int now = (unsigned int)time( 0 ); 16 srand(now); 17 return rand() % 3; 18} 19 20// ひつじのドアを開ける 21int releave_door() { 22 int n; 23 for(int i=0; i<3; i++) { 24 if(door[i] == 1 || i == choose_num) continue; 25 n = i; 26 } 27 return n; 28} 29 30// ドアを変えなかった場合 31void not_change_door_result() { 32 if(door[choose_num] == 1) win_count++; 33 else lose_count++; 34} 35 36int main() { 37 // 試行回数10000回で実験 38 for(int i=0; i<10000; i++) { 39 choose_num = choose_door(); 40 int sheep_door = releave_door(); 41 not_change_door_result(); 42 } 43 cout << win_count << " " << lose_count << endl; 44}
## 質問
ループの度に異なる乱数を生成して、正しいシュミレーションを行いたいです。
アドバイスをよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー