男女の確率問題(1)の解答例を示します。
(1)の解
(考察)
「2人の子供は、『男が2人』『男が1人、女が1人』『女が2人』の3通りなので、それぞれの確率は、1/3である」という議論は、間違っている。
プログラムでシミュレーションをしてみると、このような間違いに気づくことが多い。
●プログラム(BG111.bas)
1番目が男の子である確率と女の子である確率を同じ1/2とする。2番目が男の子である確率と女の子である確率も同じ1/2とする。この仮定で、2人の子供をランダムに多数回生成し、求める確率に該当する割合を計算する。
' << BG111.bas >> ' Tiny Basic ' 問題(1)のシミュレーション ' Dim A(2): ' 男女の状態を表す配列。 ' A(1)=0:1番目が男の場合。 ' A(1)=1:1番目が女の場合。 ' A(2)=0:2番目が男の場合。 ' A(2)=1:2番目が女の場合。 Dim B(3): ' 2人の子どもの状態を表す配列。 ' B(0):1番目が男、2番目が男の場合の数。 ' B(1):1番目が男、2番目が女の場合の数。 ' B(2):1番目が女、2番目が男の場合の数。 ' B(3):1番目が女、2番目が女の場合の数。 ' Do ' 実験回数NMAXを読み込む。 Read NMAX If NMAX <= 0 Then Exit Do ' ' 初期設定。 Randomize 123: ' 乱数の初期設定。 For K=0 to 3: B(K)=0: Next K ' ' NMAX回実験を繰り返す。 For N=1 To NMAX ' 1番目の子供の判定。 ' 1番目の子供の男女の出生割合を、1:1と考える。 ' 1番目が男ならA(1)=0、女ならA(1)=1。 ' 関数Rndで、0以上1未満の数を返す。 If Rnd < 0.5 Then A(1)=0 Else A(1)=1 ' 2番目の子供の判定。 ' 2番目の子供の男女の出生割合を、1:1と考える。 ' 2番目が男ならA(2)=0、女ならA(2)=1。 If Rnd < 0.5 Then A(2)=0 Else A(2)=1 ' ' 配列Bに記録する。 ' A(1)=0,A(2)=0 のとき、K=0 ' A(1)=1,A(2)=0 のとき、K=1 ' A(1)=0,A(2)=1 のとき、K=2 ' A(1)=1,A(2)=1 のとき、K=3 K=A(1)+2*A(2) B(K)=B(K)+1 Next N ' ' 実験結果の表示。 Print"実験回数:";NMAX Print Using"男の子が2人となる確率:#.###";B(0)/NMAX Print"男の子が1人、女の子が1人である確率:"; Print Using"#.###";(B(1)+B(2))/NMAX Print Using"女の子が2人となる確率:#.###";B(3)/NMAX Print Loop End ' ' データ。 Data 1000, 10000, 100000, 1000000, 0
実行結果
この結果、
「男の子が2人である確率」は、ほぼ1/4、
「男の子が1人、女の子が1人である確率」は、ほぼ2/4、
「女の子が2人である確率」は、ほぼ1/4
となることがわかる。