基本情報技術者試験の令和7年度の公開問題(科目B)を解こう。
今回のテーマは、「ちょうどn円にする組み合わせの総数」である。
令和7年度 基本情報技術者試験 科目 B 公開問題 問2



令和7年度 基本情報技術者試験 科目 B 公開問題
正解:ア
1問5分で得点源に!科目B公開問題・問2を「トレース」で確実に解く方法
初学者の方にとって科目B、アルゴリズム問題は慣れるまでパズルのように感じるかもしれない。でも、コツをつかめば確実に得点源にできる分野である。
今回は、令和7年度公開問題・科目B(問2)の「硬貨の組み合わせ」の問題を、初学者の方向けに丁寧に解説しよう。
1. 問題の全体像をつかもう
このプログラムの目的は、「1円、5円、10円玉を使って、合計 $n$ 円にする組み合わせが何通りあるか」を計算することである。
ここがポイント!
問題文に書かれている「考え方」を整理すると、実はすごくシンプルなことをしている。
- 10円玉を何枚使うか? でパターンを分けている。
- 10円玉を引いた「残りの金額(
rest)」を、1円と5円だけで作る方法が何通りあるか計算している。 - 「1円と5円だけで作る方法」は、「5円玉を何枚使えるか(商) + 1」で計算できる。
2. 具体例でトレースしよう($n = 12$ の場合)
このプログラムは、10円玉を何枚使うか?」でパターンを分けて数えている。
12円を払う具体例で考えてみよう。
① 10円玉を「0枚」使うとき(1回目:rest = 12)
10円を使わないので、残りの12円を「1円」と「5円」だけで作る。
- 5円を0枚使う(全部1円):1通り
- 5円を1枚使う(残りは1円):1通り
- 5円を2枚使う(残りは1円):1通り合計:3通り
プログラムの式:(12 ÷ 5の商) + 1 → 2 + 1 = 3 通り
② 10円玉を「1枚」使うとき(2回目:rest = 2)
12円から10円を引いた「残りの2円」を「1円」と「5円」で作る。
- 5円は1枚も使えないので、全部1円にする:1通り
プログラムの式:(2 ÷ 5の商) + 1 → 0 + 1 = 1 通り
🏁 合計を出すと…
- 10円を0枚使うパターン:3通り
- 10円を1枚使うパターン:1通り
- 全部合わせると:$3 + 1 = 4$ 通り
これが、プログラム内の count ← count + (rest ÷ 5の商) + 1 という式で、「今までの合計に、新しいパターン数を足していく」という動きの意味である。
トレースをしてみよう。これが、科目B攻略の王道である。
| 繰り返し | rest の値 | countの値(スタート時) | count の更新計算 | 次の rest (rest – 10) |
|---|---|---|---|---|
| 1回目 | 12 | 0 | 0 + (12 ÷ 5の商) + 1 = 3 | $12 – 10 = 2$ |
| 2回目 | 2 | 3 | 3 + (2 ÷ 5の商) + 1 = 4 | $2 – 10 = -8$ |
| 3回目 | -8 | 4 | 「10円玉を2枚使うのは無理だ!」と判断してループ終了。 | – |
この結果、合計「4通り」となり、問題文の例と一致する。
3. 空欄に入る条件を考えよう
while 文の空欄に入るのは、「いつまでこの計算(繰り返し)を続けるか?」という条件である。
なぜ「0以上」なのか?
ここが迷いどころですが、例えば合計金額 $n$ がちょうど 10円 だった場合を考えてみよう。
- 10円玉を0枚使うとき:
rest = 10→ 計算する(OK) - 10円玉を1枚使うとき:
rest = 0→ 0円を1円と5円で作る方法は「1通り(両方0枚)」として数える必要がある!
もし条件を rest > 0 にしてしまうと、rest が 0 になった瞬間にループが終わり、「10円玉をぴったり使い切るパターン」を数え漏らしてしまうのである。
重要: rest が 0 のときも、(0 ÷ 5) + 1 = 1 通りとして正しくカウントされるため、rest が 0 の状態まではループを回す必要がある。
逆に、rest がマイナス(上の例の $-8$ など)になったら、それは「10円玉を使いすぎて合計金額を超えてしまった」ということなので、計算してはいけない。
4. 結論
以上のことから、繰り返しを続ける条件は、「rest が 0 以上の間」となる。
- 正解:ア (
rest ≧ 0)
まとめ:科目Bのコツ
- 具体的な数字(12や10)を当てはめてみる
- 「境界線(0のときどうなるか?)」をチェックする
この2点を意識するだけで、正答率はグッと上がる!


コメント