問題 #4 ・ 配列 ・ 難易度 2
次の関数 shiftRight は、整数型の配列 data の全要素を右に1つずらし、末尾の要素を先頭に移動する(右方向の巡回シフト)処理を行う。プログラム中の〔 a 〕に入れる正しい式を選べ。 例えば、data が {3, 1, 4, 1, 5} のとき、関数の実行後に {5, 3, 1, 4, 1} を返す。
○整数型の配列: shiftRight(整数型の配列: data)整数型: n ← dataの要素数整数型: last ← data[n]整数型: ifor (i を n から 2 まで 1 ずつ減らす)data[i] ← data[〔 a 〕]endfordata[1] ← lastreturn data
配列を右に1つ巡回シフトするには、まず末尾の値を退避し、後ろから順に1つ左の要素を右へコピーし、最後に退避した値を先頭に格納する。 具体的に data = {3, 1, 4, 1, 5}(n=5)でトレースする。 ・last ← data[5] = 5 ・i=5: data[5] ← data[4] → {3, 1, 4, 1, 1} ・i=4: data[4] ← data[3] → {3, 1, 4, 4, 1} ・i=3: data[3] ← data[2] → {3, 1, 1, 4, 1} ・i=2: data[2] ← data[1] → {3, 3, 1, 4, 1} ・data[1] ← last(=5) → {5, 3, 1, 4, 1} したがって〔 a 〕には「i - 1」が入る。ループを後ろから回すことで、まだコピーされていない要素を上書きせずに済む点がポイントである。
登録すると解いた結果が残り、間違えた問題は日をおいて復習に出ます。
この問題は AI が作り、別の AI に解かせて検証し、人が確認したうえで公開しています。 誤りに気づいたら goku.tore9@gmail.com までお知らせください。
記号の意味に迷ったら擬似言語の記法で確かめられます。