こんにちは。福田泰裕です。
令和7年度入試から新たに始まる「情報Ⅰ」の共通テストに向けて、2022年11月9日に『試作問題』が公開されました。
問題と解答のPDFデータは大学入試センターのサイトにあるのでご覧ください👇
https://www.dnc.ac.jp/kyotsu/shiken_jouhou/r7ikou/r7houkousei.html
この記事では、情報Ⅰ試作問題の第1問の解答と解説をしていきます。
解答は隠しているので、実際に解きながら読み進めることも可能です。
解答はクリックすると表示されます。
最後まで読んでいただけると嬉しいです!
目次
答え … ⑥
関数「枚数(金額)」は、「金額」を支払うための最小の硬貨の枚数。
そして、3回目の生徒Sの発言に「46円を支払うには、10円玉を4枚、5円玉を1枚、1円玉を1枚という6枚で払い方が最小の枚数になります」とある。
よって、枚数(46) = ⑥。
答え … ⓪
問題文に「46円を支払うとき」は、「51円を支払って5円の釣り銭を受け取る」のが良いと書かれている。
つまり、「商品の価格(46円)」+「釣り銭(5円)」= 51円 を支払うのが2枚。
「釣り銭(5円)」を受け取るのが1枚。
そして、合計3枚が最小交換硬貨枚数となる。
つまり、正解は⓪「枚数(51) + 枚数(5)」
答え … ウ②、エ①
商品の価格 \(x\) 、釣り銭 \(y\) とすると、先ほどの46円を支払う例だと、
\(x=46,\; y=5\)
となる。
「46円を支払うには、枚数(51) + 枚数(5)」で求められ、
\(51 = 46 + 5\)
なので、正解は \(枚数(②x + y) + 枚数(① y)\)
答え … オ②、カ③
問題文に「整数値の商を求める演算『÷』と、その余りを求める演算『%』」とあるので、実際に計算すれば良い。
⓪ … 46 ÷ 10 + 1 = 5
① … 46 % 10 – 1 = 5
② … 46 ÷ 10 = 4
③ … 46 % 10 = 6
46円に対して10円玉は4枚使えるので、「オ」の正解は②。
その際に6円が残るので、「カ」の正解は③。
答え … ①
問題文のTの発言に「高額の硬貨から使うように考えて枚数と残金を計算していくとよい」とある。
プログラムの5行目で配列「Kouka」の添字を動かすように見える。
また、問題文の説明の5行目に「なお、配列の添字は0から始まる」とあるので、
Kouka[0] = 1
Kouka[1] = 5
Kouka[2] = 10
Kouka[3] = 50
Kouka[4] = 100
となる。
高額の硬貨を先に使うためには、配列「Kouka」の添字「i」を「4→3→2→1→0」と動かす必要があるので、正解は①「4から0まで1ずつ減らし」ながら繰り返す。
答え … ク①、ケ⓪
問題文の説明の9行目に「変数maisuに支払いに使う効果の枚数の合計が計算され、」とある。
最初、プログラム3行目で変数maisu = 0が代入されており、4~6行目の繰り返し文の中で、変数maisuに硬貨の枚数を加えていく。
空欄「オ」のところで、
「46円を10円玉で支払う枚数は 46 ÷ 10」とあるので、
「残金nokoriをKouka[i]円玉で支払う枚数」は、「nokori ÷ Kouka[i]」枚となる。
上の枚数を変数maisuに加えればよいので、正解は
maisu = ①maisu + ⓪nokori ÷ Kouka[i]
答え … コ①
問題文の説明の10行目に「変数nokoriに残りいくら支払えばよいか、という残金が計算される」とある。
空欄「カ」のところで、
「46円を10円玉で支払ったときの残金は 46 % 10」とあるので、
「残金nokoriをKouka[i]円玉で支払ったときの残金」は、「①nokori % Kouka[i]」。
答え … サ③、シ⓪
問題文の説明の5行目に「釣り銭無しの場合も含め、99円までのすべての釣銭に対し」とある。
「釣り銭無し」とは「釣り銭0円」なので、「釣り銭0円から99円まで」の繰り返し処理をつくる必要がある。
よって、正解は「③tsuri を ⓪0 から 99 まで 1 ずつ増やしながら繰り返す」。
答え … ス⓪、セ②
問1の空欄「ウ」「エ」で、「商品の価格 \(x\) 円に対して釣り銭 \(y\) 円」の硬貨の枚数は、『枚数(\(x+y\)) + 枚数(\(y\))』」と求めている。
さらに、プログラム4行目の「shiharai = kakaku + tsuri」によって、「価格(\(x\))+釣り銭(\(y\))」は「変数shiharai」に代入されている。
つまり支払い枚数は「⓪枚数(shiharai) + ②枚数(tsuri)」。
答え … ソ⓪、タ①
問題文の説明の下から4行目に「これまでの払い方での最小枚数を変数min_maisuに記憶しておき、それより少ない枚数の払い方が出るたびに更新している」とある。
つまり、「『今の支払い方硬貨の枚数』< min_maisu」となったとき、変数min_maisuに『今の支払い方の硬貨の枚数』を代入すればよい。
よって正解は、
もし⓪maisu < min_maisu ならば、
└ ①min_maisu = maisu
いかがだったでしょうか。
話題沸騰中のプログラミングの分野ですが、どうやら「文章を読んで、それをプログラムとして表現していく」という問題になりそうです。
文章をしっかり読んで、それを論理的に構築する力が求められています。
また、共通テストでは日本語で書かれた独自のプログラミング言語での出題となります。
そのためプログラミング言語それぞれ特有の知識は必要なく、繰り返し処理、分岐、配列、関数をしっかり理解していれば良いということでしょう。
ただ、関数の「引数」や、配列の「添字」についての説明は一切ないので、そこまでは学校の授業で扱い、予備知識として持っておく必要がありそうです。
さらに、「関数の添字が0から始まる」「割り算の商を求める演算は『%』」というところを見ると、VBAはお呼びでないのでしょうか……?
他の大問の解答解説も記事にしているので、ぜひご覧ください👇
共通テスト試作問題「情報Ⅰ」解答と解説 第1問
共通テスト試作問題「情報Ⅰ」解答と解説 第2問
共通テスト試作問題「情報Ⅰ」解答と解説 第3問
共通テスト試作問題「情報Ⅰ」解答と解説 第4問
最後まで読んでいただき、ありがとうございました!
質問やご意見、ご感想などがあればコメント欄にお願いします👇