科目B

基本情報技術者試験 科目B サンプル問題(2022年4月公表) 問2

次のプログラム中のaとbに入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。 次のプログラムは,整数型の配列arrayの要素の並びを逆順にする。 〔プログラム〕
整数型の配列: array ← {1, 2, 3, 4, 5}
整数型: right, left
整数型: tmp

for (left を 1 から (arrayの要素数 ÷ 2 の商) まで 1 ずつ増やす)
  right ← a
  tmp ← array[right]
  array[right] ← array[left]
  b ← tmp
endfor
答えを選ぶ

出典:基本情報技術者試験 科目B サンプル問題(2022年4月公表) 問2(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:ウ

覚える知識

配列の逆順(先頭と末尾の要素交換)

要素数 n の配列を逆順にするには、left を 1 から n÷2 の商まで動かし、left 番と n−left+1 番の要素を一時変数を使って入れ替える。

この問題で必要なこと

要素数 5、要素番号は 1 から始まるので、left=1 のとき対になるのは 5 番、left=2 のときは 4 番。したがって right ← 要素数 − left + 1。交換は tmp ← array[right]、array[right] ← array[left] のあと、退避しておいた値を array[left] に戻す。正解はウで、トレースすると {5,4,3,2,1} になる。

ひっかけ

ア・イの「要素数 − left」は要素番号が 0 から始まる場合の式で、left=1 のとき 4 番を指してしまう(±1 のずれ)。イ・エの b に array[right] を選ぶと、tmp を元の場所に戻すだけになり交換が成立しない。