アルゴリズムとプログラミング

基本情報技術者試験配列/集計」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
次の擬似言語で表される手続 range は、テストの得点を格納した配列 arr の最高点と最低点の差(得点幅)を返すことを意図している。arr = {37, 12, 58, 29, 41}(要素数 5、単位は点、添字は 1 から)を与えて実行したとき、戻り値はどれか。
○整数型: range(整数型の配列: arr)
  整数型: mx ← arr[1]
  整数型: mn ← arr[1]
  整数型: i
  for (i を 2 から arrの要素数 まで 1 ずつ増やす)
    if (arr[i] > mx)
      mx ← arr[i]
    endif
    if (arr[i] < mn)
      mn ← arr[i]
    endif
  endfor
  return mx - mn
46 点
177 点
7 点
25 点
正解
46 点

mx と mn を arr[1]=37 で初期化し、各要素と比較して更新する。最終的に mx=58、mn=12 となり差は 58−12=46 点となるため アが正しい。

?選択肢ごとの解説

ア ○mx と mn を arr[1]=37 で初期化し、各要素と比較して更新する。最終的に mx=58、mn=12 となり差は 58−12=46 点となるため アが正しい。
イ ×全要素の総和 37+12+58+29+41=177 点を求めた、差ではなく合計を計算した誤りである。
ウ ×隣接 2 要素の差や末尾付近の差だけを見て 7 点とした、最大・最小の更新を最後まで追わなかった誤りである。
エ ×最大値 58 と最小値 12 を取り違え、先頭 37 と最小 12 の差 37−12=25 点とした更新漏れの誤りである。

くわしく

最大・最小の同時走査では両者を同じ初期値(先頭要素)でそろえることが要点である。片方の初期値を 0 や別要素にすると比較が崩れ、差が誤る。

本番での押さえどころ

試験のコツ

mx と mn の値を 1 行ずつ更新表に書き、要素ごとにどちらが変わったか追う。

覚え方

『最大も最小も先頭から始める』と唱え、初期値をそろえる。

よくある誤り

mn を 0 で初期化して最小値が常に 0 と判定され、差が最大値そのものになるミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0013

【基本情報技術者試験】配列/集計の問題 — 解答・解説|ukamiru 過去問