2025年度/令和7年度大学入学共通テスト 試作問題『情報Ⅰ』第3問 問3
リュディアです。引き続き試作問題の内容を詳細に解説しながら見ていきたいと思います。試作問題は次のリンクを参考にしています。
第3問
次の問い(問1~3)に答えよ。
問3
次の文章を参考に,図2のプログラムの空欄(サ)~(タ)に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。ただし,空欄(ス)・(セ)は解答の順序は問わない。
T:プログラム(図1)ができたようですね。それを使えば,関数「枚数(金額)」のプログラムができます。関数の引数として与えられる金額の値をプログラム(図1)の変数kingakuに設定し,(7)行目の代わりに変数maisuの値を関数の戻り値とすれば,関数「枚数(金額)」のプログラムとなります。では,その関数を使って最小交換硬貨枚数を計算するプログラムを作ってみましょう。ここでも,100円以下の買い物として考えてみます。
【関数の説明】(再掲)
![](https://assets.st-note.com/img/1669592136692-KkUdWUokfw.png?width=1200)
Sさんは,図2のようなプログラムを作成した。変数kakakuに与えられる商品の価格に対して,釣り銭を表す変数tsuriを用意し,妥当なtsuriのすべての値に対して交換する硬貨の枚数を調べ,その最小値を求めるプログラムである。なお,ここでは例として商品の価格を46円としている。
このプログラムでは,先生(T)のアドバイスに従い,釣り銭無しの場合も含め,99円までのすべての釣り銭に対し,その釣り銭になるように支払う場合に交換される硬貨の枚数を求め,その最小値を最小交換硬貨枚数として計算している。
最小値の計算では,これまでの払い方での最小枚数を変数min_maisuに記憶しておき,それより少ない枚数の払い方が出るたびに更新している。min_maisuの初期値には,十分に大きな値として100を用いている。100円以下の買い物では,使う硬貨の枚数は100枚を超えないからである。
(1) kakaku = 46
(2) min_maisu = 100
(3) (サ)を(シ)から99 まで1 ずつ増やしながら繰り返す:
(4) shiharai = kakaku + tsuri
(5) maisu = (ス)+(セ)
(6) もし(ソ)< min_maisu ならば:
(7) (タ)=(ソ)
(8) 表示する(min_maisu)
図2 最小交換硬貨枚数を求めるプログラム
このプログラムを実行してみたところ3 が表示された。46 円を支払うときの最小交換硬貨枚数は,支払いで50 円玉が1 枚,1 円玉が1 枚,釣り銭で5 円玉が1 枚の計3 枚なので,正しく計算できていることが分かる。同様に,kakaku の値をいろいろと変えて実行してみたところ,すべて正しく計算できていることを確認できた。
(サ)、(ソ)、(タ)の解答群
0.maisu
1.min_maisu
2.shiharai
3.tsuri
(シ)の解答群
0.0
1.1
2.99
3.100
(ス)、(セ)の解答群
0.枚数(shiharai)
1.枚数(kakaku)
2.枚数(tsuri)
3.shiharai
4.kakaku
5.tsuri
<解説>
問3はループの中に条件分岐 が含まれるプログラミングに関する問題です。最初は(サ)(ソ)(タ)です。文中にある「釣銭を表す変数tsuriを用意し,妥当なtsuriのすべての値に対して交換する硬貨の枚数を調べ」がヒントになります。つまり tsuri を 0 から 99 まで反復処理をするわけです。そして最後の(タ)は求めるべき値 maisu です。正解は次のようになります。(サ)3(ソ)0(タ)1
また(シ)も上記のように 0 から 99 まで変化させるので(シ)0 が正解です。
最後に(ス)(セ)ですが、最小化すべき硬貨枚数は支払いと釣銭の双方の硬貨の合計になります。つまり枚数(shiharai) と枚数(tsuri) の合計です。正解は(ス)0(セ)2 となります。(ス)(セ)の順序が入れ替わっても構いません。
今日はここまでとします。
では、ごきげんよう。
この記事が気に入ったらサポートをしてみませんか?