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

基本情報技術者試験ループ」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
次の手続 halveCount は、正の整数 n を 2 で割る(整数除算で小数部切り捨て)操作を 0 になるまで繰り返した回数を返すことを意図している。「÷ の商」は整数除算を表す。n=40 のとき正しく 6 を返すよう、空欄 [ a ] に入れる継続条件として適切なものはどれか。
○整数型: halveCount(整数型: n)
  整数型: cnt ← 0
  while ( [ a ] )
    n ← (n ÷ 2) の商
    cnt ← cnt + 1
  endwhile
  return cnt
n > 1
n > 2
n > 0
n > 0 かつ n が偶数
正解
n > 0

『0 になるまで』割り続けるので n が 1 でも本体を実行する必要があり、継続条件は n > 0。40→20→10→5→2→1→0 の 6 回で停止し cnt=6 となるため ウが正しい。

?選択肢ごとの解説

ア ×n > 1 では n=1 になった時点で停止し、1→0 の最後の 1 回を数えず cnt=5 となる off-by-one の誤りである。
イ ×n > 2 では n=2 で停止し、2→1, 1→0 の 2 回を落として cnt=4 となる、下限を高く取った誤りである。
ウ ○『0 になるまで』割り続けるので n が 1 でも本体を実行する必要があり、継続条件は n > 0。40→20→10→5→2→1→0 の 6 回で停止し cnt=6 となるため ウが正しい。
エ ×n > 0 かつ n が偶数では n=5(奇数)の時点で停止し cnt=3 となり、不要な偶数条件で早期終了する誤りである。

くわしく

反復回数を数える問題では『どの値まで本体を実行するか』が継続条件で決まる。0 まで割り切るには n=1 のときも実行する n > 0 が必要で、n > 1 にすると最後の 1 回を落とす。

本番での押さえどころ

試験のコツ

n が 1 のとき本体を実行すべきかを確認し、実行が必要なら下限を 0 超とする。

覚え方

『0 になるまで=0 より大きい間』と覚える。

よくある誤り

n > 1 で止めて最終ステップを数え落とす off-by-one が最も多い。

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

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

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

無料ではじめる →

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

【基本情報技術者試験】ループの問題 — 解答・解説|ukamiru 過去問