基本情報技術者試験「配列/集計」の問題
配列 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 と取り違えるミスが多い。
アルゴリズムとプログラミングの他の問題
次の擬似言語で表される手続 sumOdd を、引数として要素数 5 の整数型の配列 {12, 125, 1008,…次の擬似言語は、整数型の配列 arr に対して隣接交換を行う手続の一部であり、外側ループの 1 回目(1…次の擬似言語は昇順に整列された配列 arr に対する二分探索の手続である。arr = {2, 4, 6, 8, 10,…次の擬似言語で表される再帰手続 f を、引数 n = 20 で呼び出したとき、戻り値として返される値はどれか。
```…単方向連結リストの各ノードはメンバ val(整数)と next(次ノードへの参照。なければ NULL)をもつ。先頭ノード…スタックに対する push(積む)と…
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0138