CO-P19|情報Ⅰ 対策問題
くじ引きのシミュレーションを行う。当たる確率は30%である。空欄【ア】に入るものはどれか。 【関数の説明】 乱数() … 0以上1未満の小数を等しい確率で1つ返す (1) atari = 0 (2) i を 1 から 1000 まで 1 ずつ増やしながら繰り返す: (3) | r = 乱数() (4) | もし 【ア】 ならば: (5) ⎿ ⎿ atari = atari + 1 (6) 表示する(atari)
解答・解説を見る
正解: 1
正答
1
この問題のポイント
一様乱数と確率の対応(区間で判定する) — 試作問題の核心技法です。
解説
乱数()は「0以上1未満の小数」をどこも同じ確からしさで返します。このとき、r がある区間に入る確率は数直線上のその区間の長さに等しくなります。たとえば r < 0.3 となるのは r が区間 0〜0.3 に入るときで、その長さは0.3。つまり**確率はちょうど30%**です。
空欄は直後の処理から逆算します。(5)の「atari = atari + 1」は当たりを数える処理なので、空欄には「確率30%で真になる条件」が入ればよい——それが r < 0.3 です。ループ1周の動きは「(3)で r を引く →(4)で r が0.3未満なら当たり」。1000回繰り返せば、atari はおよそ300前後になります。
誤答の仕組みも確認しましょう。「r == 0.3」は小数がぴったり0.3になる必要があり、成り立つ確率は事実上0。「r > 0.3」は区間の長さが0.7なので70%になり逆転します。「r < 30」は r が常に1未満なので必ず真、当たり率100%です。
この「乱数を区間に対応させる」考え方は、試作問題の待ち時間シミュレーション(累積相対度数が0.26〜0.42なら階級値2分、のような対応)の核心そのものです。確率p%の事象は r < p/100 で作る、さらに複数の事象は数直線を区間に切り分けて対応させる、と覚えておけば第3問のシミュレーションに直結します。
選択肢の確認
1.○ 区間0以上0.3未満の長さ=0.3。確率30%を正しく作る。
2.× 小数が特定の1点に一致する確率はほぼ0。ほぼ当たらない。
3.× 区間の長さが0.7になり、確率70%と逆転する。
4.× r は常に1未満で 30 より小さいので常に真。全回当たりになる。
ここだけは覚えよう
確率p%は r < p/100 で作る — 一様乱数では「区間の長さ=確率」。数直線を切り分けて対応させる。