社長のコラム


センター試験の「情報」(2)

2023.02.18

京都を発った東海道新幹線が猛烈な勢いで湖東の田園を過ごしてトンネルを抜けると、ときおり思い出す挿話があります。

猿は木から落ちても猿だが、代議士は選挙に落ちるとただの人になる、という言葉を残した大野伴睦(おおのばんぼく)、その人ゆかりの岐阜羽島(ぎふはしま)が迫っています。

前回からの続きで、比例代表選挙の当選者数を配分するプログラムについて見ていきます。やはりそこには明確なルールが必要であるわけです。選挙に落選した人も、そんな人に投票した有権者の人も納得できるような、当選者決定のロジックがあらかじめ存在しなければならないわけです。代議士になるかただの人になるかを左右するわけですから真剣になるところです。

前回のプログラムコードを実行した結果はこうでした。

図4 各政党の当選者数の表示
基準得票数 : 580
比例配分
A党 : 2.068966
B党 : 1.137931
C党 : 2.482759
D党 : 0.310345

問題文は以下のように続きます。

Kさん : 得票数に比例して配分すると小数点のある人数になってしまうね。小数点以下の数はどう考えようか。例えば、A党は 2.068966だから2人が当選するのかな。

Mさん : なるほど。切り捨てで計算すると、A党は2人、B党は1人、C党は2人、D党は0人になるね。あれ? 当選者数の合計は5人で、6人に足りないよ。

Kさん : 切り捨ての代わりに四捨五入したらどうだろう。

Mさん : そうだね。ただ、この場合はどの政党も小数点以下が0.5未満だから、切り捨てた場合と変わらないな。だからといって小数点以下を切り上げると、当選者数が合計で9人になるから3人も多くなってしまう。

Kさん : このままでは上手くいかないなぁ。先生に聞いてみよう。


先生に聞くのはいいアイデアです。2.48人を切り捨てて2人にするとか、四捨五入とか、乱暴な気がしていました。切り捨てていい人間なんていません。

問題文は第二章に入ります。

Mさん : 先生、比例代表選挙では各政党の当選者数はどうやって決まるのですか? 当選者数が整数なので、割合だけだと上手くいかなかったのです。

先 生 : 様々な方法があるけど、日本では各政党の得票数を1, 2, 3, ...と整数で割った商の大きい順に定められた議席を配分していく方法を採用しているよ。

これはいわゆるドント方式です。ドント方式という言葉を知らなくてもわかるような配慮はなされていますが、あらかじめ知っていたほうが有利なことには言をまちません。


先生は、プログラムではなく机上の計算で答えを導いています。

この例だと表2のように、①から⑥の順に議席が各政党に割り当てられるんだ。C党が①の議席を取っているけど、このとき、何の数値を比較したか分かるかな。

表2 各政党の得票数と整数で割った商
A党B党C党D党
得票数12006601440180
÷1②1200④ 660①1440180
÷2⑤ 600330③ 72090
÷3400220⑥ 48060
÷4 30016536045
・・・

サンプル問題では、得票数を「1で割った商」と書いてあったところ「÷1」と書き換えました。÷2, ÷3, ÷4も同様です。÷5以下はサンプル問題でも割愛されています。


Mさんは、先生の説明を十分に理解して的確に回答します。会話は続きます。

Mさん : 1で割った商です。A党から順に1200, 660, 1440, 180 ですね。

先 生 : そうだね。ではA党が②の議席を取るとき、何の数値を比較したのだろうか。

Mさん : C党は1議席目を取ったので、1440を2で割った商である720を比較します。A党から順に1200, 660, 720, 180 ですね。この中で数値が大きいA党が議席を取ります。なるほど、妥当な方法ですね。

私が気になったのは、D党がこの得票数で1議席を獲得するとしたらいったい何人の当選者があったときだろうかと。

A党は1200で、1200割る180は6.66…ですから6人、B党は660で、660割る180は3.66…ですから3人、C党は1440で、1440割る180は割り切れて8人となり、都合、17か18の議席があるとD党は1人当選するわけです。


17か18とは、たとえばC党の得票が1441だったら18議席必要であり、C党が1439であったら17議席でもいいということになります。1票の重みが垣間見られます。

総得票数におけるD党の得票率は5.17%、19.33分の1です。それだけで17議席の1隅に入ってもいいのか、あるいは逆に、17議席なければ1議席すら確保できないのは少数意見をないがしろにしているのではないか、と議論はあるようです。

机上で計算できることをどうしてわざわざプログラムに書くのか、と思われる方があるかもしれません。プログラムを作ったら、テストをしなければなりません。それを怠るプログラマーはおりません。テストとは、答えが分かっているものをプログラムに実行させて、同じ答えが返ってくることを確認するものです。

なんにせよ、プログラムに書いてみるのはいいことです。問題文ではこのあと、これをプログラミングしていきます。(次回)

© 2023 ばんな情報システム株式会社