要素番号が0から始まる配列TANGOがある。
n個の単語がTANGO[1]からTANGO[n]に入っている。
図は,n番目の単語をTANGO[1]に移動するために,TANGO[1]からTANGO[n-1]の単語を順に一つずつ後ろにずらして単語表を再構成する流れ図である。
aに入れる処理として,適切なものはどれか。
正答1
解説
正解は1です。
図の流れ図では、まずTANGO[n]の内容をTANGO[0]に退避します。
次に、変数iを初期値n-1から増分-1で終値0まで変えながら、処理aを繰り返します。
最終的に、TANGO[1]に元のn番目の単語が入り、他の単語が一つずつ後ろにずれればよいことになります。
【選択肢別解説】
1:○ TANGO[i]の内容をTANGO[i+1]に移す処理です。
i=n-1のときはTANGO[n-1]をTANGO[n]へ移し、以後iを減らしながら後ろへずらします。
i=0のときは退避しておいたTANGO[0]がTANGO[1]に入り、目的どおりの並びになります。
2:× TANGO[i]の内容をTANGO[n-i]に移す処理です。
i=n-1のときにTANGO[n-1]がTANGO[1]に入り、元のTANGO[1]の単語が失われます。
3:× TANGO[i+1]の内容をTANGO[n-i]に移す処理です。
i=n-1のときにTANGO[n]がTANGO[1]に入り、元のTANGO[1]の単語が上書きされて失われます。
4:× TANGO[n-i]の内容をTANGO[i]に移す処理です。
i=n-1のときにTANGO[1]がTANGO[n-1]に上書きされ、元のTANGO[n-1]の単語が失われます。
【ポイント】
配列の要素を後ろへずらすときは、上書きで値を失わないよう末尾側から処理します。
使っていない要素(ここではTANGO[0])を一時的な退避先に使う手法もよく出題されます。