本文へスキップ

FUNDAMENTAL INFORMATION TECHNOLOGY ENGINEER

基本情報技術者の問題解説:配列 a={1,4,7}, b={2,4,6,8} に対して…

データ構造及びアルゴリズム 難しい fe_b_v89_alg_sortsearch_007

問題

配列 a={1,4,7}, b={2,4,6,8} に対して、次の手続 mergeScore(a,b) を実行したときの戻り値はどれか。

○整数型: mergeScore(整数型の配列: a, 整数型の配列: b)
  整数型: i ← 1, j ← 1, s ← 0
  while (i ≦ aの要素数 and j ≦ bの要素数)
    if (a[i] ≦ b[j])
      s ← s + a[i]
      i ← i + 1
    else
      s ← s - b[j]
      j ← j + 1
    endif
  endwhile
  return s + i × 10 + j
  1. 34
  2. 43
  3. 44(正解)
  4. 45
出典:オリジナル問題|参考範囲:試験要綱Ver.5.5 / FEシラバスVer.9.2 科目B範囲

正解と解説

正解:44

aとbの先頭を比べながら進めます。1は加算、2は減算、4はa側を優先して加算、次の4はb側で減算、6を減算、7を加算します。この時点でi=4となりaを使い切ります。sは0、i=4、j=4なので戻り値は0+40+4=44になります。

43は最後のjを3のままとした場合、34はiとjを逆にした場合に出やすい値です。45はb[4]=8まで処理してしまう誤りです。

マージ処理では、どちらの配列の添字が進むかが重要です。同値の場合にどちらを優先するかも戻り値に影響します。

ループ終了の境界:while条件は and なので、どちらか一方の配列を使い切った時点で即座に終了します。今回はa側が先に尽きてi=4となり、bにはb[4]=8が未処理のまま残ります。通常のマージと違い残り要素を片付ける処理が無いため、最後にjが4で止まる点を取り違えないことが正答44を導く鍵です。

この問題について

出典:オリジナル問題|参考範囲:試験要綱Ver.5.5 / FEシラバスVer.9.2 科目B範囲

公開問題・サンプル問題の形式、擬似言語記法、アルゴリズム読解・トレース・空欄補充・セキュリティ事例判断の傾向を参考にした独自問題です。本文・数値・選択肢は新規作成しています。

公式試験問題、公開問題、市販教材、外部問題サイトの問題文を転載・改題したものではありません。

参考範囲: 2026年度現行科目B・シラバスVer.9.x参考

参考文献・出典(公式情報)

RELATED

関連問題