CO-P27情報Ⅰ 対策問題

コンピュータとプログラミングプログラミング特訓 (第3問対策)

じゃんけんの手をランダムに決める。0=グー、1=チョキ、2=パーとするとき、空欄【ア】に入るものはどれか。 【関数の説明】 乱数(a, b) … a以上b以下の整数を等しい確率で1つ返す (1) te = 【ア】 (2) もし te == 0 ならば: 表示する("グー") (3) そうでなくもし te == 1 ならば: 表示する("チョキ") (4) そうでなければ: 表示する("パー")

解答・解説を見る

正解: 1

正答

1

この問題のポイント

乱数の範囲指定(値の設計と一致させる) を問う問題です。

解説

空欄は直後の場合分けから逆算します。(2)〜(4)は「te==0 ならグー、te==1 ならチョキ、そうでなければパー」という3分岐。問題文の設計も「0=グー、1=チョキ、2=パー」の3通りです。したがって te に入るべきは0・1・2のどれかが等確率で出る値、すなわち 乱数(0, 2)(0以上2以下の整数)です。

正解の動きをトレースすると: 乱数(0,2)が0なら(2)でグー、1なら(3)でチョキ、2なら(2)(3)とも偽なので(4)でパー。3つの手がそれぞれ確率1/3で表示されます。

怖いのは選択肢3の 乱数(0, 3) です。0・1・2・3の4通りになり、3が出たときも(4)の「そうでなければ」に流れてパーと表示されます。エラーは出ないのに、パーだけ確率が2/4=1/2 と2倍になる——実行できてしまう分だけ発見しにくいバグです。「そうでなければ」は「残り全部」を受け取る枝なので、想定外の値もそこに吸い込まれることを覚えておきましょう。

共通テストのシミュレーション問題では、「乱数の範囲」と「場合分けの網羅」がぴったり一致しているかが正しさの生命線です。乱数(a, b) を見たら「何通り出るか(b−a+1通り)」を数え、分岐の数・値の設計と突き合わせる検査を習慣にしましょう。

選択肢の確認

1.○ 0以上2以下の3通りが等確率で、0=グー・1=チョキ・2=パーの設計と一致。
2.× 乱数(1,3)では0が出ないためグーが出ず、3がパー扱いになる。
3.× 4通りになり、3もパーに流れてパーだけ確率2倍になる。
4.× 乱数(2,0)は「2以上0以下」で範囲の指定が逆。

ここだけは覚えよう

乱数(a, b)は b−a+1 通り — 場合分けの数と一致させる — 「そうでなければ」は想定外の値も吸い込む。

関連問題

CO-P26CO-P28