平成26年度 春期 基本情報技術者試験 午前 問8
テクノロジ/アルゴリズム長さ m,n の文字列をそれぞれ格納した配列 X,Y がある。図は,配列 X に格納した文字列の後ろに,配列 Y に格納した文字列を連結したものを,配列 Z に格納するアルゴリズムを表す流れ図である。図中の a,b に入れる処理として,適切なものはどれか。ここで,1文字が一つの配列要素に格納されるものとする。 (注)ループ端の繰返し指定は,変数名:初期値,増分,終値を示す。

出典:平成26年度 春期 基本情報技術者試験 午前 問8
- アa:X(k) → Z(k),b:Y(k) → Z(m+k)
- イa:X(k) → Z(k),b:Y(k) → Z(n+k)
- ウa:Y(k) → Z(k),b:X(k) → Z(m+k)
- エa:Y(k) → Z(k),b:X(k) → Z(n+k)
正解:ア
解説
配列Zの前半(先頭からm個)に配列Xの内容を,後半(m+1番目からn個)に配列Yの内容を格納すれば,XとYを連結したものになります。ループ1(kが1からmまで)ではXの各要素をそのままZの同じ添字位置に格納すればよいのでa:X(k)→Z(k)。ループ2(kが1からnまで)ではYの要素をZのm+k番目(Xのm個の後ろ)に格納する必要があるのでb:Y(k)→Z(m+k)となります。
選択肢ごとの解説
- ア正しい。前半にXをそのまま,後半にYをXの長さ分だけずらして格納することで,XとYを正しく連結できます。
- イ誤り。bでYをZ(n+k)に格納すると,Yの長さnだけずれた位置になり,Xの後ろに連続してつながりません。
- ウ誤り。aでYをZ(k)に格納すると,先頭にYが入ってしまい,XとYの順序が逆になります。
- エ誤り。a,bともに順序が入れ替わっており,さらにbのずらし幅もnになっているため,正しく連結されません。