誕生日のパラドックス
誕生日のパラドックス
「何人集まれば、その中に誕生日が同一の2人(以上)がいる確率が、50%を超えるか?」
基本コード
まずは下のコードをProcessingに貼り付けて動かしてみよう
int hit = 0;void setup(){ size(600, 400); // 99人を集めて誕生日が同じ人がいるかチェック。いたら1を返す。いなければ0を返す。 hit = check(99);}void draw(){ background(0); text(hit, width/2, height/2);}
// ここから下はいじっちゃだめだぞ!!!!// checkは人数を渡すと誕生日が同じ人がいたら「1」を返す。いなかったら「0」。int check(int count){ int[] list = createBirthList(count); for(int i=0; i<count; i++){ for(int j=i+1; j<count; j++){ if(list[i] == list[j]){ return 1; } } } return 0;}int[] createBirthList(int count){ int[] list = new int[count]; for(int i=0; i<count; i++){ int birth = (int)random(1, 366); list[i] = birth; } return list;}やってみよう
「23人集まれば、誕生日が同じ人がいる確率が50%を超える」らしい。
本当だろうか?
プログラムを実行して確認してみよう!
23人集めて同じ誕生日の人がいたかチェックする
void setup(){ size(600, 400); hit = check(23);}check(23)
とすることでランダムで23人を集めて同じ誕生日の人がいたかチェックできるぞ。
もしいたら「1」を、いなかったら「0」を返す。
返ってきた「1」か「0」を、変数hitに入れてあげよう。
- 画面上に「1」と表示されたら同じ誕生日の人がいたことになる。
- 画面上に「0」と表示されたら同じ誕生日の人はいなかったことになる。
10回実行してみよう
10回中、「1」が表示されたのは何回あったかな? そして確率は何%と言えるかな?
100回実行してみよう
え?100回も実行してらんない?
じゃあどうしようかな?
プログラムを修正してみよう!
1万回実行してみよう
ふふ。