KM-08情報Ⅰ 対策問題

共通テスト過去問チャレンジ試作問題

試作問題 第3問 問2 Sさんは、変数 kingaku に与えられた目標の金額(100円以下)に対し、その金額ちょうどになる最小の硬貨枚数を計算するプログラムを考えた(図1)。ここでは例として目標の金額を46円としている。使う硬貨は1円玉、5円玉、10円玉、50円玉、100円玉のみとし、配列 Kouka に硬貨の額を低い順に設定している。なお、配列の添字は0から始まるものとする。 先生のヒントに従い、高額の硬貨から何枚まで使えるかを計算する方針で、(4)〜(6)行目のような繰返し文にした。この繰返しで、変数 maisu に支払いに使う硬貨の枚数の合計が計算され、変数 nokori に残りいくら支払えばよいか、という残金が計算される。÷は整数値の商を求める演算、%はその余りを求める演算である。 図1の空欄【キ】に入れるのに最も適当なものを選べ(空欄【ク】〜【コ】には適切な内容が入るものとする)。

KM-08の問題図版
解答・解説を見る

正解: 1

正答

1

問題の整理

46円を最小枚数の硬貨で支払うには、「大きい硬貨から使えるだけ使う」のが正解です(50円は使えないので、10円×4、5円×1、1円×1の6枚)。プログラムでは、配列 Kouka = [1, 5, 10, 50, 100] のどの位置から、どちら向きにたどるかをループの範囲で指定します。÷は商(整数の割り算)、%は余りを求める演算です。

解き方

  1. 方向: 「高額の硬貨から使う」ので、配列の末尾(100円)から先頭(1円)へ向かってたどります → 添字は減らす方向。
  2. 両端: 配列の要素は5個、添字は0から始まるので 0〜4。末尾の添字は「要素数−1」の4、先頭は0です。
  3. よって「4 から 0 まで 1 ずつ減らし」が正解。

動作を追ってみると: i=4(100円)→46÷100=0枚・余り46、i=3(50円)→0枚・余り46、i=2(10円)→4枚・余り6、i=1(5円)→1枚・余り1、i=0(1円)→1枚・余り0。合計6枚 ✓

誤答の理由も明確です。「5から」始めると Kouka[5] は存在せず範囲外エラー。「0から増やす」と1円玉から46枚使ってしまい、最小枚数になりません。ループの空欄は方向両端の添字の2点で検証しましょう。

選択肢の確認

1.○ 添字4(100円)から0(1円)へ、高額から正しくたどる。
2.× Kouka[5]は存在しない(最後の添字は要素数−1の4)。
3.× 低額から使うと1円玉ばかりで最小枚数にならない。
4.× 方向も範囲も誤り。

ここだけは覚えよう

ループの空欄は「方向」と「両端」で検証 — 0始まりの配列の末尾は要素数−1。

関連問題

KM-07KM-09