基本情報技術者試験の科目Bの公開問題を題材に,硬貨の組合せの総数を求める処理について学習します。この問題では,1円玉・5円玉・10円玉を使って指定された金額を作る組合せを,繰返し処理によって数える方法を確認します。
令和7年度 基本情報技術者試験 公開問題 科目B 問2
問 次のプログラム中の に入れる正しい答えを,解答群の中から選べ。
関数 change は,10より大きい整数を引数nで受け取り,1円玉,5円玉,10円玉を使ってちょうどn円にする組合せの総数を返す。
例えば,12円にする組合せは,次のように数えられる。10円玉を使わない場合には,1円玉と5円玉だけでちょうど12円にすることになる。その組合せは,使える5円玉の枚数が0以上(12 ÷ 5 の商)以下なので,(12 ÷ 5 の商)+ 1 = 3通りある。同様に,10円玉を1枚使う場合には,1円玉と5円玉だけでちょうど2円にすることになり,その組合せは(2 ÷ 5 の商)+ 1 = 1通りある。10円玉を2枚以上使う組合せはない。よって,1円玉,5円玉,10円玉を使ってちょうど12円にする組合せは,3 + 1 = 4通りである。
〔プログラム〕
○整数型: change(整数型: n)
整数型: count ← 0
整数型: rest ← n
while ( )
count ← count + (rest ÷ 5 の商) + 1
rest ← rest - 10
endwhile
return count
解答群
ア rest ≧ 0
イ rest ≧ 5
ウ rest ≧ 10
エ rest > 0
オ rest > 5
カ rest > 10
【解答】ア
【解説】
このプログラムは,10円玉を使う枚数を1枚ずつ増やしながら,残りの金額(rest)を1円玉と5円玉で作る組合せを数えている。最初は,10円玉を0枚使う場合なので,restは12である。このとき,1円玉と5円玉だけで12円を作る組合せは,5円玉を0枚,1枚,2枚とする3通りある。そのため,countに3を加える。次に,10円玉を1枚使う場合を考える。restから10を引くと2になるので,残りの2円を1円玉と5円玉で作る組合せは1通りである。そのため,countに1を加え,countは4になる。さらに10円玉を1枚増やすと,restは 2-10=-8 となる。この場合,残りの金額が負になっているため,1円玉と5円玉を使って金額を作ることはできない。したがって,restが0以上の間は組合せを数える必要があるが,restが負になった時点で繰返し処理を終了すればよい。そのため,while文の条件は rest ≧ 0 となる。なお,restが0の場合も,1円玉と5円玉を使わずにちょうど0円にする組合せが1通りある。そのため,「rest ≧ 0」としておく必要がある。
【参考】
この問題のポイント
この問題から学べることは,
- 硬貨の組合せの総数を求める方法
- 残りの金額を計算しながら,組合せを数える方法
- while文を使って,条件を満たす間処理を繰り返す方法
- プログラムの処理を追跡して,変数の値の変化を確認する方法
です。特に,10円玉の枚数を1枚ずつ増やしながら,残りの金額を1円玉と5円玉で作る組合せを数え,その合計を求める方法を理解しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


