問題プレビューID: 72a7fbcf

問 8

長さ mm,nn の文字列をそれぞれ格納した配列 XX,YY がある。図は,配列 XX に格納した文字列の後ろに,配列 YY に格納した文字列を連結したものを,配列 ZZ に格納するアルゴリズムを表す流れ図である。図中の a,b に入れる処理として,適切なものはどれか。ここで,1 文字が一つの配列要素に格納されるものとする。

(注)ループ端の繰返し指定は,変数名:初期値,増分,終値を示す。

Labelab
ア

X(k)→Z(k)X(k) \to Z(k)

Y(k)→Z(m+k)Y(k) \to Z(m + k)

イ

X(k)→Z(k)X(k) \to Z(k)

Y(k)→Z(n+k)Y(k) \to Z(n + k)

ウ

Y(k)→Z(k)Y(k) \to Z(k)

X(k)→Z(m+k)X(k) \to Z(m + k)

エ

Y(k)→Z(k)Y(k) \to Z(k)

X(k)→Z(n+k)X(k) \to Z(n + k)

解説

配列 XX(長さ mm)の文字列の後ろに配列 YY(長さ nn)の文字列を連結して配列 ZZ に格納する。まず XX の内容を ZZ の先頭側にコピーし,その直後に YY の内容をコピーする。

1 番目のループ 1(k:1,1,mk: 1, 1, m)では,XX の kk 番目の要素を ZZ の kk 番目に格納する。すなわち a は X(k)→Z(k)X(k) \to Z(k)。

続くループ 2(k:1,1,nk: 1, 1, n)では,YY の kk 番目の要素を,XX の長さ mm 分だけ後ろにずらした位置(m+km + k 番目)に格納する。すなわち b は Y(k)→Z(m+k)Y(k) \to Z(m + k)。

したがって,a は X(k)→Z(k)X(k) \to Z(k),b は Y(k)→Z(m+k)Y(k) \to Z(m + k) であり,正解は「ア」である。