共通テスト情報関係基礎2024年度 本試験 第3問 正解
問題を確認するにはこちら
プログラミングでは、まず以下を考える。
- どのような処理をしたいのか(業務的な意味)
- それぞれの変数が何を意味しているのか
今回は上記を把握しやすいが、代わりに数学的な処理・内容理解が複雑になってくる問題である。
情報Ⅰとしては出題されにくい内容であり、一般的には難しく感じる人が多いだろう。
問1(空欄オ)あるいは問2の空欄キまでをしっかり解けるようになっていればよい。
なお、旧課程での試験のため、共通テスト用プログラム表記の記載方法が異なるが、以下のように読み替える。
- 「←」は代入の意味で、新課程では「=」
- 「=」は等しいの意味で、新課程では「==」
空欄ア
正解 : 0
空欄イ
正解 : 1
解説
問題文中の説明を読めば、以下の図のように Mahou[retu, gyou] という配列になっていることがわかる。
第1行の和は Mahou[0,1] + Mahou[1,1] + Mahou[2,1] である。
よって、空欄アは0、空欄イは1。
空欄ウ
正解 : 1
解説
各行の和を求める。以下の図のような計算になるので、空欄ウの正解は①「Mahou[retu,gyou]」。
空欄エ
正解 : 0
解説
左上から右下の対角方向の和を求める。以下の図のような計算になるので、空欄エの正解は⓪「Mahou[i,i]」。
空欄オ
正解 : 4
解説
右上から左下の対角方向の和を求める。以下の図のような計算になるので、空欄オの正解は④「Mahou[N-1-i, i]」。
問題を確認するにはこちら
空欄カ
正解 : 4
空欄キ
正解 : 2
解説
最初に記入する「1」のマスは、問題文より「一番下の行の中央」である。
- 列は、おおむね全体 N の半分だが、Nが奇数であり(N-1)÷2。よって、空欄カは④「(N-1)÷2」
- 行は、一番下なので、N-1。よって、空欄キは②「N-1」
空欄ク
正解 : 6
空欄ケ
正解 : 3
空欄コ
正解 : 6
空欄サ
正解 : 5
解説
マスに値をいれるルールは、基本的にその前のマスの右下であるが、その他に下図にあるように以下の4つのルールがある。
- ①下にはみ出る場合は、一番上の行に
- ②右にはみ出る場合は、一番左の行に
- ③右にも下にもはみ出る場合は、第0列第0行に
- ④すでに数が記入されていた場合は、z-1を記入した(直前に記入した)マスの一つ上
上記を踏まえてプログラムを見ていく。
- (05)行目の条件文を読み解くのが難しい。右下のマスは Mahou[ x+1, y+1 ] だが、列番号も行番号も「%N」がついている。下図の通り、「%N」がつくことで回り込む処理になっており、①②③のルールを網羅している
- (06)行目では、右下 or 回り込んだ先のマスが「0」(未記入) であれば、そこに値を格納するので、xやyは「0」かどうかチェックしたマスの値になる。よって、空欄ケは③「(x+1)%N」、空欄コは⑥「(y+1)%N」
- (05)行目の条件を満たさない場合は、ルール④の処理となるので、直前に記入したマスの一つ上を設定する
- もともとx, yは直前に記入したマスの値のままなので、そこから「一つ上」にするために、yの値を1減らす。よって、空欄サは⑤「y←y-1」
ここで空欄クに戻ると、(06)行目、つまり右下 or 回り込んだ先のマスが「0」(未記入)のときに実行する処理の回数を求めたい。
1〜9は下図のように値を格納するが、右下 or 回り込んだ先のマスが「0」(未記入)のときは、2, 3, 5, 6, 8 ,9の6回なので、空欄クは6。
問題を確認するにはこちら
空欄シ
正解 : 2
空欄ス
正解 : 0
解説
プログラミングの問題の考え方に立ち返り、以下を考える。
- どのような処理をしたいのか(業務的な意味)
- それぞれの変数が何を意味しているのか
問題文中から図7のプログラムについて以下がわかる。
- 実現したい処理は「作成した魔法陣が正しいか検証したい」
- 「最初の行の和」と「以降の行の和」が一致するか
- 問題文からわかる変数の意味は以下の通り
- hantei_wa:最初の行の和
- batu :以降の行の和が hantei_wa と一致しない場合に「1」を設定し、この値に応じて(魔法陣が正しいかの)メッセージを表示
図7に出てくる変数は、ここまでですべて意味がわかったので、プログラムの中身を理解していく。
- (07)行目では、最初の行の和を hantei_wa に格納したいので、「最初の行」ということが空欄シの中身となる。最初の行のときには hantei_wa=0 なので、空欄シは②
- その他の選択肢では、最初の行でも成立しない
- (08)行目では、ここまでで実行されている処理である「hantei_waと以降の行の和が一致しない場合はbatuの値を1とする」が盛り込まれているはずである。これをプログラムで表したのは「もしwa≠hantei_waならば batu←1を実行する」なので、空欄スは⓪
- 選択肢①と迷うかもしれない。選択肢①にすると、 どこかの行で不一致が出てbatuの値を1にしても、次の行で0にリセットされてしまい、不一致検出ができなくなり不適切
空欄セ
正解 : 4
空欄ソ
正解 : 3
空欄タ
正解 : 1
解説
先程と同様に、プログラミングの問題の考え方に立ち返り、以下を考える。
- どのような処理をしたいのか(業務的な意味)
- それぞれの変数が何を意味しているのか
問題文中から図8のプログラムについて以下がわかる。
- 実現したい処理は「作成した魔法陣が正しいか検証したい」
- 配列Mahouに1からN×Nまでのすべての数が重複なく入っていることを検証する
- 問題文からわかる追加でわかる変数の意味はない
図8を見ると新たに1次元配列Kakuninが出てきており、その変数の意味を理解することが重要となる。
これらを踏まえて、プログラムの中身を理解していく。
(05)行目で懸案のKakuninが出てくるが、この配列の意味がわからないので、どういう処理をしているのかがわからない。ここから先は難しいので解けなくて問題ない。解く際には、処理内容がわからないので、選択肢を1つずつ当てはめて、どういう処理をしようとしているのかを考えてみる。
結論としては、配列Kakuninは、3次の魔法陣から1〜9までの添字を持ち、それぞれの添字の数字の出現回数を数えるためのものである。
- 添字の数字が出現したら、その要素の値を1カウントアップする
- こうすることで、要素の値を見れば、該当添字の数字の出現回数がわかる
- 魔法陣であればすべての要素の値が1になるはずで、1にならなければ不適切としてbatuに1を格納する
このことがわかれば、
- (05)行目では、添字が出現する数字を示しているので、Masu[retu, gyou]が当てはまり、空欄セは④「Masu[retu, gyou]」
- (09)行目では、すべての要素の値が1になるはずで、1にならなければ不適切としてbatuに1を格納するので、空欄ソは③「Kakunin[i]≠1」、空欄タは1
今回の問題に関わる詳細・動画は以下を確認しよう。