長さm,nの文字列をそれぞれ格納した配列X,Yがある。
図は,配列Xに格納した文字列の後ろに,配列Yに格納した文字列を連結したものを,配列Zに格納するアルゴリズムを表す流れ図である。
図中のa,bに入れる処理として,適切なものはどれか。
ここで,1文字が一つの配列要素に格納されるものとする。
(注)ループ端の繰返し指定は,変数名:初期値,増分,終値を示す。
正答1
解説
正解は1です。
2つの配列を連結する流れ図の空欄を埋める問題です。
図では、ループ1が変数kを1から1ずつ増やしてmまで繰り返し、その中で処理aを行います。
ループ2は変数kを1からnまで繰り返し、その中で処理bを行います。
配列Xの長さはm、配列Yの長さはnなので、ループ1でXを、ループ2でYを処理します。
【選択肢別解説】
1:○ aでX(k)をZ(k)に入れると、Z(1)〜Z(m)にXの文字列が並びます。
bでY(k)をZ(m+k)に入れると、Z(m+1)〜Z(m+n)にYが続きます。
Xの後ろにYを連結した結果になります。
2:× bでY(k)をZ(n+k)に入れると、Yの格納開始位置がZ(n+1)になります。
mとnが異なる場合、n<mならXの一部を上書きし、n>mなら間に空きができます。
正しくはXの長さmだけずらしたZ(m+k)です。
3:× aでY(k)を扱うと、長さnのYをm回処理することになり、要素の過不足が生じます。
さらにYを先頭に置くため、連結の順序も逆になります。
4:× aでY(k)をZ(k)に入れるので、Zの先頭にYが来て連結の順序が逆になります。
また、ループ1の回数mはYの長さnと一致しません。
【ポイント】
配列の連結では、後ろに付ける配列の添字を前の配列の長さだけずらします。
ループの終値がどの配列の長さに対応しているかを確認すると、空欄の候補を絞り込めます。