第24問 コラッツ予想(角谷の問題)
「偶数なら2でわる、奇数なら3倍して1をたす」を繰り返すと、どんな数でもいつかは1になる、というのがコラッツ予想(角谷の問題)です。n=6 が何回で1になるかを数えて表示しよう。まず n を2でわったあまりで偶数か奇数かを調べ、偶数なら半分に、奇数なら3n+1にします(3か所の穴をうめよう)
難易度:★★★★★(5/難しい)。共通テスト「情報I」で使われるDNCL(共通テスト用プログラム表記)の穴埋め問題です。JavaScriptを有効にすると、このページでプログラムを組み立てて実行しながら解けます。
プログラム
n = 6
kaisu = 0
n > 1 の間繰り返す:
amari = [A]
もし amari == 0 ならば:
n = [B]
そうでなければ:
n = [C]
kaisu = kaisu + 1
表示する("回数は" + kaisu)
空欄 [A]・[B]・[C] に当てはまるものを、次の選択肢から選びます。
選択肢
n % 2
n / 2
n * 3 + 1
n * 2
n - 2
ヒント
偶数・奇数は n % 2 で判定します。偶数なら n / 2、奇数なら n * 3 + 1 にして繰り返します
解答
- 空欄 [A] …
n % 2
- 空欄 [B] …
n / 2
- 空欄 [C] …
n * 3 + 1
よくある間違い
- [A]
n / 2 [B]n / 2 [C]n * 3 + 1 … 偶数か奇数かは2でわった「あまり」で調べます。n / 2 では商になってしまうので、n % 2 を使いましょう
- [A]
n % 2 [B]n * 2 [C]n * 3 + 1 … 偶数のときは半分にします。2倍ではなく n / 2 を使います
- [A]
n % 2 [B]n - 2 [C]n * 3 + 1 … 偶数のときは2を引くのではなく、2で割って半分にします
- [A]
n % 2 [B]n / 2 [C]n * 2 … 奇数のときは「3倍して1をたす」ので、n * 3 + 1 を使いましょう
ほかの問題