CO-P16|情報Ⅰ 対策問題
次のプログラムは、Dataの要素を新しい配列 Gyaku に逆順で入れる。空欄【ア】に入るものはどれか。 (1) Data = [1, 2, 3, 4, 5] (2) Gyaku = [0, 0, 0, 0, 0] (3) i を 0 から 4 まで 1 ずつ増やしながら繰り返す: (4) ⎿ Gyaku[i] = Data[【ア】] (5) 表示する(Gyaku) (表示: [5, 4, 3, 2, 1])
解答・解説を見る
正解: 1
正答
1
この問題のポイント
添字の対応式(逆順コピー) を問う問題です。
解説
空欄補充は、求める出力から添字の対応を逆算します。Gyaku を [5, 4, 3, 2, 1] にしたいので、Gyaku[0] には Data[4] の5を、Gyaku[1] には Data[3] の4を…という対応が必要です。i と空欄の値を並べると「i=0→4、i=1→3、i=2→2、i=3→1、i=4→0」。足すと常に4になる関係なので、空欄は 4 - i です。
トレースで確認します。
i=0のとき: Gyaku[0] = Data[4] = 5 → [5, 0, 0, 0, 0]
i=1のとき: Gyaku[1] = Data[3] = 4 → [5, 4, 0, 0, 0]
i=2のとき: Gyaku[2] = Data[2] = 3 → [5, 4, 3, 0, 0]
i=3のとき: Gyaku[3] = Data[1] = 2 → [5, 4, 3, 2, 0]
i=4のとき: Gyaku[4] = Data[0] = 1 → [5, 4, 3, 2, 1]
「5 - i」を選びたくなりますが、i=0 のとき Data[5] となり範囲外です。要素数5の配列の末尾の添字は4(=要素数-1)。この「1つずれ」(オフバイワン)は、プログラム問題で最も多いミスの1つです。
対策はシンプルで、両端の値(i=0 と i=4)を代入して検算すること。i=0 で末尾(4)、i=4 で先頭(0)が出れば正解と確定できます。共通テストの添字式の穴埋めは、この両端検算だけでほぼ確実に絞り込めます。
選択肢の確認
1.○ i=0→Data[4]、i=4→Data[0]。両端の検算が一致。
2.× i - 4 は i=0 で -4 となり、負の添字で不正。
3.× 5 - i は i=0 で Data[5] となり範囲外。末尾は4であって5ではない。
4.× i + 1 は1つ後ろにずらすだけで、逆順にはならない(しかも i=4 で範囲外)。
ここだけは覚えよう
添字式は両端(最初と最後のi)を代入して検算 — 要素数nの末尾はn-1。逆順コピーは「(n-1) - i」。