過去問解きまくり研究所 ホーム

令和8年度 科目B 問1

アルゴリズム

配列に関する問題

次のプログラム中の[ ]に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。

次のプログラムは,整数型の配列 data の末尾の要素の値を先頭の要素に移動する。この際,末尾以外の各要素の値は,一つずつ後ろの要素に移動する。

〔プログラム〕

整数型の配列: data ← {1, 2, 3, 4, 5, 6, 7, 8, 9}
整数型: top, i
整数型: len ← dataの要素数
top ← data[len]
for (i を [ ])
  data[i] ← data[i - 1]
endfor
data[1] ← top
答えと解説を見る

✓ これが正解エlen から 2 まで 1 ずつ減らす

解説

len から 2 まで減らし、後ろの要素から写せば値を失いません。

この問は、配列の要素を一つずつ後ろへずらす繰返しの向きを決める問題です。軸になるのは、data[i] ← data[i - 1] という代入が data[i] の元の値を上書きしてしまう点です。上書きされる前にその値を次の要素へ写し終えていなければ、値が失われます。末尾の値だけは、繰返しの前に top へ退避してあります。

len から 2 まで 1 ずつ減らす形で、data ← {1, 2, 3, 4, 5, 6, 7, 8, 9} を追ってみます。len は 9、top は 9 です。i = 9 で data[9] に data[8] の 8 が入り、i = 8 で data[8] に 7 が入ります。このとき data[8] の元の 8 はすでに data[9] へ写してあるので失われません。同じように i = 2 で data[2] に 1 が入って繰返しが終わり、最後に data[1] ← top で 9 が入ります。結果は {9, 1, 2, 3, 4, 5, 6, 7, 8} となり、問題文の動作と一致します。

つまり、後ろ側の要素から順に写していく、len から 2 まで 1 ずつ減らす指定が正解です。終わりを 2 にするのは、data[1] には繰返しの後で top を入れるからで、i = 1 まで回すと data[0] という範囲外を参照してしまいます。

要素を後ろへずらすときは後ろから、前へずらすときは前から処理する、と覚えておくと、繰返しの向きを迷わずに決められます。

ほかの選択肢はなぜ違うのか

出典:令和8年度 基本情報技術者試験 科目B 問1

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)