FUNDAMENTAL INFORMATION TECHNOLOGY ENGINEER
基本情報技術者の問題解説
問題
配列 a={1,4,2,5,3} に対して、次の手続 pairHard(a) を実行したときの戻り値はどれか。
○整数型: pairHard(整数型の配列: a)
整数型: i, j, s ← 0
for (i を 1 から aの要素数 - 1 まで 1ずつ増やす)
for (j を i + 1 から aの要素数 まで 1ずつ増やす)
if ((a[i] + a[j]) mod 2 = 0)
s ← s + (j - i)
elseif (a[i] < a[j])
s ← s + 1
endif
endfor
endfor
return s- ア 11
- イ 13
- ウ 14
- エ 16
出典:オリジナル問題|参考範囲:試験要綱Ver.5.5 / FEシラバスVer.9.2 科目B範囲
正解と解説
正解:14
正解:14
全ての i<j の組を調べる。和が偶数なら j-i を加え、和が奇数でも a[i]<a[j] なら1を加える。例えば i=1 では (1,2),(1,3) で各1、(1,4) で3、(1,5) で4を加えて合計9。残りの組も加えると最終的に14になる。
13は (3,5) の奇数かつ増加の1点を落とした場合、16は偶数組を単に2点ずつ数えた場合に出やすい。11は条件に合わない組を早く除外しすぎている。 途中のsを行ごとに分けて書くと、どの組で加点したかを確認しやすい。特に(2,5)のようにどちらの条件にも当てはまらない組は、sを増やさないまま次へ進む。
二重ループは、外側iごとに内側jを全て見る。分岐が2段階あるときは、最初のifに入った組はelseifを評価しない点に注意する。
この問題について
公開問題・サンプル問題の形式、擬似言語記法、アルゴリズム読解・トレース・空欄補充・セキュリティ事例判断の傾向を参考にした独自問題です。本文・数値・選択肢は新規作成しています。
公式試験問題、公開問題、市販教材、外部問題サイトの問題文を転載・改題したものではありません。