平成26年度 春期 午前 問8
アルゴリズム
配列に関する問題
長さ m,n の文字列をそれぞれ格納した配列 X,Y がある。図は,配列 X に格納した文字列の後ろに,配列 Y に格納した文字列を連結したものを,配列 Z に格納するアルゴリズムを表す流れ図である。図中の a,b に入れる処理として,適切なものはどれか。ここで,1 文字が一つの配列要素に格納されるものとする。
〔流れ図〕字に書き起こしたもの
開始
↓
┌─ ループ 1 k:1,1,m ─┐ (注)ループ端の繰返し指定は,
│ ┌─────┐ │ 変数名:初期値,増分,終値
│ │ a │ │ を示す。
│ └─────┘ │
└─ ループ 1 ─────────────┘
↓
┌─ ループ 2 k:1,1,n ─┐
│ ┌─────┐ │
│ │ b │ │
│ └─────┘ │
└─ ループ 2 ─────────────┘
↓
終了- ア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)
答えと解説を見る
✓ これが正解アa:X(k) → Z(k) / b:Y(k) → Z(m+k)
解説
すでに埋めた個数だけずらして置きます。
この流れ図は二つのループでできています。前のループで一方の配列を写し、後のループでもう一方を続けて写す形です。決めることは二つあります。一つ目は、どちらを先に写すかです。設問は、配列 X に格納した文字列の後ろに配列 Y の文字列を連結すると書いているので、先に並ぶのは X の側であり、前のループで X を写します。二つ目は、後のループで書き込みを始める位置です。前のループで埋まったのは先頭から m 個ぶんなので、Y の一文字目を置くのは m の次の配列要素です。よって後のループの書き込み先は、m に繰返しの変数を足した位置になります。長さ 2 と長さ 3 の小さな例で当てると、前半に二文字、後半に三文字が隙間なく並び、正しく連結されます。ずらす幅はすでに埋めた個数である、と覚えておくとよいです。
ほかの選択肢はなぜ違うのか
- イa:X(k) → Z(k) / b:Y(…:先に写す側の選び方は合っていますが、ずらす幅を後ろに付ける方の長さにしています。長さ 2 と長さ 3 の例で当てると四番目から書き始めることになり、三番目が埋まらないまま残ります。
- ウa:Y(k) → Z(k) / b:X(…:前のループで後ろに付けるはずの側を写しているので、できあがる並びは設問が求める順序と前後が入れ替わります。ずらす幅の取り方が合っていても、順番が違えば連結になりません。
- エa:Y(k) → Z(k) / b:X(…:先に写す側の選び方も、ずらす幅の取り方も、どちらも設問と食い違っています。順序が入れ替わるうえに書き始めの位置もずれるので、二つの誤りが重なった形です。
この問題の用語
- アルゴリズム問題を解くための、決まった手順や考え方そのものです。同じ問題でも手順によって、処理にかかる時間や必要な記憶量が変わります。
出典:平成26年度 春期 基本情報技術者試験 午前 問8(改変:原典の図表をテキストに書き起こした)
同じ用語が出る問題
- 平成31年度 春期 午前 問18:理想的なハッシュ法の説明(アルゴリズム)
- 平成30年度 秋期 午前 問2:排他的論理和に関する問題(アルゴリズム)
- 平成29年度 春期 午前 問79(アルゴリズム)
- 平成29年度 春期 午前 問19:LRUに関する問題(アルゴリズム)
- 平成28年度 秋期 午前 問19:LRUに関する問題(アルゴリズム)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)