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

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

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
配列 score には得点が格納されている。次の手続 countTopN は、まず最高点を求め、最高点との差が 5 点以内(最高点 − 得点 ≦ 5)の人数を「上位層」として数えて返す。score = {92, 87, 88, 89, 90, 91, 92, 87, 88, 89, 90, 91, 92, 50, 40, 30}(要素数 16、単位は点、添字は 1 から)を与えて実行したとき、戻り値はどれか。
○整数型: countTopN(整数型の配列: score)
  整数型: mx ← score[1]
  整数型: i
  for (i を 2 から scoreの要素数 まで 1 ずつ増やす)
    if (score[i] > mx)
      mx ← score[i]
    endif
  endfor
  整数型: cnt ← 0
  for (i を 1 から scoreの要素数 まで 1 ずつ増やす)
    if (mx - score[i] ≦ 5)
      cnt ← cnt + 1
    endif
  endfor
  return cnt
2 人
6 人
120 人
13 人
正解
13 人

第 1 パスで最高点 mx=92 を求め、第 2 パスで 92−score[i]≦5(得点 87 以上)を数える。該当は 87〜92 の 13 件であり、50・40・30 は差が大きく外れるため cnt=13 となり エが正しい。

?選択肢ごとの解説

ア ×最高点ちょうどの 92 の出現数だけを数えて 2 人とした、しきい値内の他の得点を取りこぼした誤りである。
イ ×先頭付近だけ数えて途中で打ち切り 6 人とした、ループを最後まで回さなかった早期終了の誤りである。
ウ ×件数 13 の桁を取り違え、または余分に膨らませて 120 人とした桁の誤りである。
エ ○第 1 パスで最高点 mx=92 を求め、第 2 パスで 92−score[i]≦5(得点 87 以上)を数える。該当は 87〜92 の 13 件であり、50・40・30 は差が大きく外れるため cnt=13 となり エが正しい。

くわしく

最高点を基準とする相対しきい値の集計では、まず最大値を確定し、その後に各要素との差を判定する 2 パス構成になる。基準が固定値ではなくデータ依存である点が単純なしきい値集計と異なる。

本番での押さえどころ

試験のコツ

先に最高点を確定し、各得点との差が 5 以下かを順に判定する。

覚え方

『まず頂点、次に差』と 2 段階で集計する手順を覚える。

よくある誤り

最大値の確定を忘れて先頭要素を基準にしたり、差の境界 ≦ 5 を < 5 と取り違えるミスが多い。

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

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

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

無料ではじめる →

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

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