要素番号が0から始まる配列TANGOがある。
n個の単語がTANGO(1)からTANGO(n)に入っている。
図は,n番目の単語をTANGO(1)に入れるために,TANGO(1)からTANGO(n-1)の単語を順に一つずつ後ろにずらして単語表を再構成する流れ図である。
□に入れる処理として正しいものはどれか。
正答1
解説
正解は1です。
流れ図では、最初にn番目の単語TANGO(n)を、要素番号0のTANGO(0)へ退避します。
その後、iをn-1から1ずつ減らし、0になるまで繰り返します。
空欄には、単語を1つ後ろの要素へ移す処理が入ります。
【選択肢別解説】
1:○ TANGO(i)の内容をTANGO(i+1)へ移す処理です。
i=n-1のとき、TANGO(n-1)の単語がTANGO(n)へ移ります。
iを減らしながら順に後ろへずらし、最後のi=0では退避したn番目の単語がTANGO(1)に入ります。
2:× TANGO(i)の内容をTANGO(n-i)へ移す処理です。
i=n-1のとき、TANGO(n-1)の単語でTANGO(1)を上書きしてしまい、1番目の単語が失われます。
3:× TANGO(i+1)の内容をTANGO(n-i)へ移す処理です。
i=n-1のとき、TANGO(n)の単語がTANGO(1)へ移り、1番目の単語が失われます。
4:× TANGO(n-i)の内容をTANGO(i)へ移す処理です。
i=n-1のとき、TANGO(1)の単語でTANGO(n-1)を上書きしてしまい、単語が失われます。
【ポイント】
配列の要素を後ろへずらすときは、上書きを防ぐため後ろの要素から順に移します。
先頭に入れたい値は、あらかじめ別の場所へ退避しておくのが定石です。