第44問 半分にしぼると何回でたどりつく?
1024ページの辞書から目当ての言葉をさがすとき、まん中を開いて「前半と後半のどちらにあるか」を決め、のこりを半分にしぼっていきます。のこり nokori が1ページになるまでに何回しぼればよいか、kaisu で数えて表示しよう。あてはまる記号を選ぼう(3か所の穴をうめよう)
難易度:★★★☆☆(3/標準)。共通テスト「情報I」で使われるDNCL(共通テスト用プログラム表記)の穴埋め問題です。JavaScriptを有効にすると、このページでプログラムを組み立てて実行しながら解けます。
プログラム
nokori = 1024
kaisu = 0
nokori [A] 1 の間繰り返す:
nokori = nokori [B] 2
kaisu = kaisu [C] 1
表示する("のこりは" + nokori + "ページ、しぼった回数は" + kaisu + "回です")
空欄 [A]・[B]・[C] に当てはまるものを、次の選択肢から選びます。
選択肢
ヒント
半分にしぼる作業は「のこりが1ページより多いあいだ(nokori > 1)」だけくり返します。1回しぼるごとに、のこりは半分(nokori / 2)、回数は1つふえます(kaisu + 1)。1024ページでもたった10回でたどりつけます(2を10回かけると1024になるからです)
解答
- 空欄 [A] …
>
- 空欄 [B] …
/
- 空欄 [C] …
+
よくある間違い
- [A]
>= [B]/ [C]+ … 止めたいのは「のこりが1ページになったとき」です。>= だと nokori が1のときにもう1回しぼってしまい、1 / 2 = 0.5 で「のこりは0.5ページ」、回数も10回ではなく11回と出てしまいます。1ページより多いあいだだけ続けたいので > を使います
- [A]
> [B]% [C]+ … % はわり算の「あまり」です。1024 % 2 = 0 なので1回でのこりが0ページになり、「1回でたどりついた」とおかしな答えになります。半分にするのはわり算の / です
- [A]
> [B]- [C]+ … - だと1回に2ページずつしか減らないので、512回もかかってしまいます。半分にしぼるのは「2をひく」ではなく「2でわる」です
- [A]
> [B]/ [C]/ … kaisu は0から始まるので、1でわっても 0 / 1 = 0 のままで「0回」と出てしまいます。何回しぼったかは1回ずつ数えたいので kaisu + 1 とたし算にしましょう
- [A]
>= [B]% [C]+ … 2か所ちがいます。くらべるのは > (1ページより多いあいだだけ続ける)、しぼり方は nokori / 2 (2でわって半分)です
ほかの問題