科目B

令和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
答えを選ぶ

出典:令和7年度 基本情報技術者試験 科目B 公開問題 問2(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:ア

覚える知識

繰返しの終了条件と境界値(硬貨の組合せ数)

前判定の繰返しでは、条件の等号を含めるかどうかで境界の 1 回を数えるかが決まる。残りがちょうど 0 になるケースも有効な組合せとして数える。

この問題で必要なこと

10 円玉を 0 枚、1 枚、…と使うごとに rest を 10 ずつ減らし、そのたびに (rest÷5 の商)+1 通りを足していく。rest がちょうど 0(例: n=20 で 10 円玉 2 枚)でも「1 通り」として数える必要がある。n=12 では rest が 12→2 と 2 回数えて 4 通りになり、題意と一致する。条件は rest ≧ 0 で、正解はア。

ひっかけ

rest ≧ 5 や rest ≧ 10 にすると、残り 2 円の場合(12 円の例の 2 回目)を落とす。rest > 0 にすると、ちょうど 10 円玉で払い切れる rest = 0 の 1 通りを落とす。