CO-P23情報Ⅰ 対策問題

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

次のプログラムは、配列 Data の6個の値を条件で2つのグループに分け、それぞれの個数を変数 guusu と kisuu に数える。実行後、guusu と kisuu の値の組み合わせとして正しいものはどれか。 (1) guusu = 0 (2) kisuu = 0 (3) Data = [3, 8, 5, 12, 7, 6] (4) i を 0 から 5 まで 1 ずつ増やしながら繰り返す: (5) | もし Data[i] % 2 == 0 ならば: (6) | | guusu = guusu + 1 (7) | そうでなければ: (8) ⎿ ⎿ kisuu = kisuu + 1 (9) 表示する(guusu, kisuu)

解答・解説を見る

正解: 1

正答

1

この問題のポイント

場合分けカウント(偶数と奇数の振り分け) を問う問題です。

解説

条件「Data[i] % 2 == 0」は「2で割った余りが0」、つまり「偶数かどうか」の判定です。「もし〜そうでなければ」の形なので、各要素は必ず偶数カウンタか奇数カウンタのどちらか一方に数えられます。

2つのカウンタの変化を1ステップずつトレースします。
i=0のとき: Data[0]=3。3%2=1 → 奇数 → kisuu=1。(guusu=0)
i=1のとき: Data[1]=8。8%2=0 → 偶数 → guusu=1。
i=2のとき: Data[2]=5 → 奇数 → kisuu=2。
i=3のとき: Data[3]=12 → 偶数 → guusu=2。
i=4のとき: Data[4]=7 → 奇数 → kisuu=3。
i=5のとき: Data[5]=6 → 偶数 → guusu=3。
よって表示は 3 と 3 です。

ここで強力なのが検算の考え方です。「もし〜そうでなければ」では取りこぼしも二重カウントも起こらないので、guusu + kisuu = 要素数6 が必ず成り立ちます(不変条件)。トレース後に 3+3=6 を確かめれば、数え間違いをその場で発見できます。選択肢2(2と4)や3(4と2)も合計は6ですが、偶奇の中身({8,12,6}と{3,5,7})まで書き出せば区別できます。

共通テストでは、合格/不合格、正解/不正解のような二分割カウントとして頻出です。カウンタが2つ以上動く問題では「カウンタの合計が処理件数と一致するか」のチェックを習慣にしましょう。

選択肢の確認

1.○ 偶数は{8, 12, 6}の3個、奇数は{3, 5, 7}の3個。合計6も一致。
2.× 偶数を2個と数え間違えた値。8,12,6で3個ある。
3.× 偶数と奇数を逆に割り当てた読み違い。
4.× 全部が偶数ではない。条件判定を無視した形。

ここだけは覚えよう

二分割カウントは「カウンタの合計=要素数」で検算 — %2==0 は偶数、==1 は奇数の判定。

関連問題

CO-P22CO-P24