CO-P13|情報Ⅰ 対策問題
次のプログラムは、n が 1 より大きい間、n を半分にしながら「*」を1個ずつ表示する。実行したとき、「*」は何個表示されるか。 (1) n = 16 (2) n > 1 の間繰り返す: (3) | n = n ÷ 2 (4) ⎿ 表示する("*") ※ ÷は整数の商。
解答・解説を見る
正解: 1
正答
1
この問題のポイント
半分にし続けるループの回数(log₂n) を問う問題です。
解説
「n > 1 の間繰り返す」は、周回のたびにまず条件を判定し、真なら実行、偽になったら終了する形です。ループの中では n を半分にして「*」を1個表示するので、「n が半分にされた回数=表示される個数」になります。
n の変化を1ステップずつトレースします。
1周目: n=16>1 は真 → n=16÷2=8、「」1個目。
2周目: n=8>1 は真 → n=4、「」2個目。
3周目: n=4>1 は真 → n=2、「」3個目。
4周目: n=2>1 は真 → n=1、「」4個目。
5周目の判定: n=1>1 は偽 → ループ終了。
よって「*」は 4個 です。
16=2⁴ なので、半分にし続けて1になるまでの回数はちょうど4回(log₂16=4)。この「半分にすると回数は log₂n で済む」という感覚は、二分探索が速い理由そのものです。1024個のデータでも半分にし続ければ10回で1個に絞れます。逆に2倍にし続けるループ(1→2→4→…)はこの裏返しで、対で理解しておきましょう。
共通テストでは「このループは何回実行されるか」「nがいくつなら5回になるか」という形で問われます。条件付きループでは「最後の1回が実行されるか」の見極めが得点の分かれ目——n=2 のときは実行され(2>1は真)、n=1 になった瞬間に終わる、と判定のタイミングを丁寧に追うのがコツです。
選択肢の確認
1.○ 16→8→4→2→1 と4回半分にされ、そのたびに1個表示。
2.× 8は1回目の商。回数ではない。
3.× 16は初期値。回数ではない。
4.× n=1 では条件 1>1 が偽なので5回目は実行されない。
ここだけは覚えよう
半分にし続けるループは log₂n 回で終わる — 16なら4回、1024なら10回。二分探索が速い理由もこれ。