プログラミングの基礎(擬似言語のトレース)
配列 a の要素を逆順に並べ替えるつもりで、次のプログラムを書いた。配列の要素番号は1から始まる。実行した後の a の内容はどれか。
整数型の配列: a ← {1, 2, 3, 4, 5, 6}
整数型: n ← 6, t
for (i を 1 から n まで 1 ずつ増やす)
t ← a[i]
a[i] ← a[n − i + 1]
a[n − i + 1] ← t
endfor
- A{6, 5, 4, 3, 2, 1}
- B{6, 5, 4, 4, 5, 6}
- C{1, 2, 3, 4, 5, 6}
答えと解説を見る
正解:C. {1, 2, 3, 4, 5, 6}
繰返しの中の3行は、a[i] と a[n − i + 1] の値を入れ替えます。i = 1〜3 で前半と後半が入れ替わり、いったん {6, 5, 4, 3, 2, 1} になります。ところが終値が n なので、i = 4〜6 でも a[4] と a[3]、a[5] と a[2]、a[6] と a[1] をもう一度入れ替え、元の並びに戻ってしまいます。逆順にするには、終値を n ÷ 2(n = 6 なら3)にして、各組を1回だけ入れ替えます。
- A. i = 3 で止めた場合の結果です。i = 4〜6 で同じ組をもう一度入れ替えます。
- B. t を使わずに a[i] ← a[n − i + 1] だけを行った場合の結果です。
- C. 正しい。各組を2回ずつ入れ替えるので、元の並びに戻ります。