【情報I 大学入学共通テスト】(図説多め)サンプル問題第2問をじっくり解説してみました その2

eyecatch-270

生徒
生徒

大学入学共通テストの情報Iの問題解いてみたけど難しい…

この記事は、このように感じて「情報I」に不安を持った人への記事となっています。

この記事では大学入試センターが公表している「情報I」のサンプル問題について解説してみたいと思います。

コトゼニ
コトゼニ

以前に第2問問1を解説したので、今回は問2を解説するね

サンプル問題ってなに?という方や、問1から見てみようという方はこちらの記事もご覧ください。

eyecatch-166【情報I 大学入学共通テスト】サンプル問題第2問をじっくり解説してみました

問1では獲得議席数を求めるためのプログラムを作成しましたが、このプログラムでは、思う通りの結果が得られないことが判明しました。そこで、先生に助言をもらいに行くところから設問はスタートします。

第2問 問2 問題文
サンプル問題「情報」第2問 問2

ここでは、先生の助言により、「得票数を1、2、3…と整数で割った商の大きい順に定められた議席を配分していく」方法を見つけ、それを実施しようとしています。

その方法を実行するにあたり、この後の文章で新しい配列「Hikaku」「Tosen」を定義づけることになります。

配列「Hikaku」は「各党の得票数を1、2、3…と整数で割った商(比較する数値)を格納する配列」として用意し、

配列「Tosen」は「各政党に配分する議席数(当選者数)を格納する」ために用意します。

初期値は全部0にしています。下の図が言及している部分です。

第2問 問2 問題文
サンプル問題「情報」第2問 問2

当選者数を算出する手順を読み解く

ここから、新しい方法で当選者数を算出する方法が記載されています。

第2問 問2 問題文 算出する手順
サンプル問題「情報」第2問 問2

さらに、それぞれの手順を終えた際の配列の様子が図示されています。

第2問 問2 問題文 算出する手順
サンプル問題「情報」第2問 問2

ここで、難しいと感じるポイントは

「手順1終了時」の下に「1回目の手順3終了時」の様子が書かれており、「手順2」がどのように挙動したのかが見えにくい点ではないでしょうか。

ということで手順1から図説してみました。

手順1で行われていること

手順1は「配列 Tokuhyo の各要素の値を配列 Hikaku の初期値として格納する。」という内容の指示です。

各党の得票数を1、2、3…と整数で割った商(比較する数値)を格納するための配列「Hilalku」に、得票数(配列「Tokuhyo」に格納されている値)を代入して(格納して)いくわけです。

これで、配列「Hikaku」には順に[1200, 660, 1440, 180]が代入されました。

手順1の図説

手順2で行われていること

手順2の指示は

「配列Hikaku の要素の中で最大の値を調べ,その添字maxi に対応する配列Tosen[maxi] に 1 を加える」です。

前半部分「配列Hikaku の要素の中で最大の値を調べ」というのはなんとなくイメージしやすいですが、

いきなりmaxiというのが現れて「?」となってしまうことが予想されます。ここで注目したいのは、maxiというのはその後ろでTosen[maxi]という配列の添字として出ているということです。

添字に使われているということは、「maxi」とは変数であることが予想できます。

手順2の1

まず、「配列Hikaku の要素の中で最大の値を調べ」という部分の指示について確認しましょう。

配列「Hikaku」の中身は[1200, 660, 1440, 180]となっており、最大の値は「1440」ですね。

手順2の2

前半部分の指示から、配列「Hikaku」に入っている値の中で、最大の値は「1440」です。添字は「2」ですね。

そのため、変数「maxi」にはその添字「2」を代入します。

そして配列「Tosen」の添字として利用します(Tosen[maxi])。

つまりここでは、Tosen[2]となり、配列「Tosen」の3つ目の値を指すことになります。

後半部分の指示、「その添字maxiに対応する配列Tosen[maxi]に1を加える」というのは、

ここでは、「Tosen[2](配列「Tosen」の3つ目の値)の値に1を加えろ」ということになります。

手順2の図説①
手順2の図説②

手順2が終えた時点で

配列Hikakuは[1200, 660, 1440, 180]、

配列Tosenは[0, 0, 1, 0]となっています。

設問にある配列の図

「手順1終了時」と「1回目の手順3終了時」の間には、この状態になっており、

この状態を描けるかイメージできるかどうかがポイントとなります。

手順2の図説③

では続いて手順3の内容を見ていきましょう!

手順3で行われていること

手順3の指示は

「Tokuhyo[maxi]を Tosen[maxi]+1 で割った商を Hikaku[maxi]に格納する。」というものです。

一度読むだけでは難しく感じると思いますので、部分分割していきましょう。

手順3の1

まず、Tokuhyo[maxi]を明らかにしましょう。

maxiは変数でしたね。今は、値 「2」が入っています。

つまり、Tokuhyo[maxi]は、Tokuhyo[2]のことです。

配列「Tokuhyo」の中身は[1200, 660, 1440, 180]ですので、Tokuhyo[2]が指す値は「1440」です。

手順3の図説①

手順3の2

続いて、指示の中にある「 Tosen[maxi]+1 」がどのような値を指すか明らかにしましょう。

maxiは依然として 2 が入っています。そのため、Tosen[maxi] は Tosen[2] となります。

今、配列「Tosen」の中身は[0, 0, 1, 0]ですので、Tosen[2]が指す値は「1」です。

ということは、Tosen[maxi]+1 は Tosen[ 2 ]+1 となり、

つまり 1 + 1 = 2 ということになります。

手順3の図説②

手順3の3

ここまで来たら、手順3の指示を実行できそうですね。

「Tokuhyo[maxi]を Tosen[maxi]+1 で割った商を Hikaku[maxi]に格納する。」と手順3の指示について

この場合、Tokuhyo[maxi]はTokuhyo[2]であり、値は「1440」。

同じように、Tosen[maxi]+1 は、Tosen[2]+1 、つまり 1+1 = 2 。

そのため、「Tokuhyo[maxi]を Tosen[maxi]+1 で割った商」は1440 ÷ 2 = 720 と導くことができます。

そして、その商を配列「HIkaku」の添字「maxi」のところに代入します。

maxiは変わらず 2 が入っているので、Hikaku[maxi] は Hikaku[2] となり、元は 1440 が入っていた部分が、720に置き換わり、配列「Hikaku」の中に格納されます。

その結果、手順3を終えた時点の配列「HIkaku」の中身は[1200, 660, 720, 180]に変化します。

手順3の図説③

長くなりましたが、手順3の処理は終わりです。

手順2および3で、配列「Hikaku」、「Tosen」の中身は変化しています。

そのため、1回目の手順3終了時には、設問の図のような配列になるのです。

※1回目と書いているのは、手順4で繰り返し処理が指示されているからです。

手順3の図説④

この手順2と3を正しくイメージすることがこの問いの肝です。

手順2の実行結果が図示されていないので、あくまで解くテクニックとしては、下図の順番で考えるのが良いでしょう。

手順2がイメージしにくいので、処理の流れはこの順番でイメージしましょう

手順4で行われていること

手順4は

「手順2と手順3を当選者数の合計が議席数の6になるまで繰り返す。」と書いているように、繰り返し処理の指示です。手順2と3を繰り返します。

手順の流れを図示の通りにイメージして、手順2の処理内容を的確に把握していれば、空欄も埋めやすくなるでしょう。

それを当選者数の合計が議席数の6になるまで、つまり、配列「Tosen」の中身の値を足して、6 になるまで繰り返すということになります。

2回目の手順2と3の処理結果を丁寧に見ていきながらどのように処理が繰り返されるのかを確認しましょう。

2回目の手順2を実行すると…

2回目の手順2の流れ

2回目の手順3を実行すると…

2回目の手順3の流れ

2回目の手順2と手順3を終えるとどうなっているか

2回目の手順2と手順3を終えると

2回目の処理を終えた時点では配列「Tosen」の中身の値の合計は6に達していませんね。

なので、3回目の手順2・3が実施されることになります。

配列「Tosen」の中身の値の合計は6に達すると手順4が終了し、手順5に進みます。

手順5で行われていること

手順5では

「各政党の党名(配列 Tomei)とその当選者数(配列 Tosen)を順に表示する。」と指示されています。

これは手順4までの処理結果を表示する指示ですので、獲得議席を求める内容ではありません。

なので、問題を解く上では考慮する必要がない手順です。

これで全ての手順が終了しました。

まとめ

いかがでしたでしょうか。

設問の中で先生が発した方法「得票数を1、2、3…と整数で割った商の大きい順に定められた議席を配分していく」ということを手順にまとめました。一つ一つの手順を終えた時点でどのような状態になっているかを整理できれば理解が進むのではないでしょうか。

問3では、問2で試した方法をプログラムに落とし込む内容になっています。

また記事にまとめるので、ぜひご覧くださいね。

最後までこの長い記事を読んでいただきありがとうございました。

それではまたここで会いましょう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA