BLOG

2022.11.13タイムレスな子供の教育

大学入試センターの情報I試作問題(1)

こんにちは。代表の小林です。


しばらく書いていなかったのですが、そうこうしている間に大学入試センターから情報Iの試作問題というのが公開されました。以前紹介していたサンプル問題(記事1記事2を参照)の流れと同じような感じですが、実際の試験を想定した試作問題となってます。やってみた感じでは、よくできた感じの内容でした。今回はこの中の第3問のプログラミングの問題について書いてみたいと思います。


コイン枚数の計算


内容としては、お金を支払うときになるべくコインの枚数を少なくしたいという話で、コイン枚数を計算して一番少ない組み合わせを探すという内容でした。お得意の会話形式で話しが進んでいき、関数の定義を作る内容が出てきます。問題文から引用すると次の関数を作る話が出てきます。



「枚数(金額)… 引数として「金額」が与えられ,ちょうどその金額となる硬 貨の組合せの中で,枚数が最小となる硬貨枚数が戻り値となる関数。 例:8 円は「5 円玉が 1 枚と 1 円玉が 3 枚」の組合せで最小の硬貨枚数に なるので,枚数(8)の値は 4 となる。」



これ自体は大した話ではなく、みなさんが普段ちょうどお金を支払うときにやっていることを書いているだけなのですが、これをプログラムで作りましょうという話になります。そして、擬似言語(センター試験用に開発された言語DNCLというらしいですが)で書かれたプログラムの穴埋めをします。


考え方としては、金額の大きいコインの金額で順番に対象となる金額を割った商を求めて、商が1以上であればコインが使えるので、その枚数分カウントします。そして、使ったコインの金額だけ引く、すなわちあまりの金額が残りの金額になるので、これをコインの種類だけ繰り返せば求められるという内容です。商とあまりの計算を使えばすぐできますよね。


最小な支払いとお釣りのコイン枚数の計算


先程の関数を使って最適なお釣りの枚数を計算するというのが次に続きます。考えやすいように購入金額(例では46円)に0円から99円まで追加して支払いする場合に関して考えることとし、それぞれの金額に対しての支払の枚数とお釣りの枚数の合計を関数を使って計算し、その値が最も小さい組み合わせをさがすというなようです。意味さえわかれば回答するのはそこまで難しくはないのですが、プログラミング言語に慣れているか慣れていないかで繰り返し処理の考え方が難しく感じる度合いが違うような気はしました。


該当の処理を抜粋すると下記のような内容です。



(1) kakaku = 46
(2) min_maisu = 100
(3) サ を シ から 99 まで 1 ずつ増やしながら繰り返す:
(4) |shiharai = kakaku + tsuri
(5) |maisu = ス + セ
(6) |もし ソ < min_maisu ならば:
(7) ⎿⎿ タ = ソ
(8) 表示する(min_maisu)


サからタまでわかるでしょうか?


tsuri を0から99まで1ずつ増やしながら繰り返します。関数枚数を使い、maisuを計算します。枚数(shiharai) と枚数(tsuri) の合計が使用するコインの枚数ですね。そして、その数が最小の枚数より小さい場合は、最小の枚数をその数にするので、min_maisu = maisu ですね。


おわりに


試作問題のプログラミングの問題いかがでしたでしょうか。ご興味あれば実際にやってみると良いと思います。プログラミングについてもっと勉強したいという方は、教室でも受講できますのでお問い合わせください。


 

INFORMATION無料体験会・ワークショップ・ご案内

     

春の無料体験会

無料体験会を実施します。ぜひ一度ご体験ください!

プログラミング&ロボット教室 授業運営パッケージ

弊社で実施している授業を取り入れたい方々向けに提供しています。