|
> No.2015[元記事へ]
GAIさんへのお返事です。
> 選挙でよくドント方式という言葉を耳にするのでこの仕組みについて、数値的に調べてみました。
LET N=9 !議席数
LET G=3 !政党数
DATA 120,90,60 !総得票数
!LET N=9 !議席数
!LET G=4 !政党数
!DATA 1000,700,600,280 !総得票数
DIM T(G)
MAT READ T
DIM W(G),D(G),S(G)
MAT W=T
MAT D=CON !1から
MAT S=ZER !各政党の議席獲得数
FOR i=1 TO N
!!!MAT PRINT W; !debug
!!!MAT PRINT D; !debug
LET MX=W(1) !1人当たりの得票数が大きい順に
LET P=1
FOR J=2 TO G
IF W(J)>MX THEN
LET MX=W(J)
LET P=J
ELSEIF W(J)=MX THEN !同点の場合、割る数が小さいもの
IF D(J)<D(P) THEN
LET MX=W(J)
LET P=J
END IF
END IF
NEXT J
PRINT i;": 政党=";P;W(P) !i人目
LET S(P)=S(P)+1
LET D(P)=D(P)+1 !整数で割る
LET W(P)=T(P)/D(P)
NEXT i
MAT PRINT S;
PRINT
!計算に用いた表を表示する
LET MX=D(1)
FOR J=2 TO G
IF D(J)>MX THEN LET MX=D(J)
NEXT J
FOR J=1 TO MX
MAT W=(1/J)*T
PRINT "÷";STR$(J);":";
FOR i=1 TO G
PRINT W(i);
NEXT i
PRINT
NEXT J
END
実行結果
1 : 政党= 1 120
2 : 政党= 2 90
3 : 政党= 3 60
4 : 政党= 1 60
5 : 政党= 2 45
6 : 政党= 1 40
7 : 政党= 3 30
8 : 政党= 2 30
9 : 政党= 1 30
4 3 2
÷1: 120 90 60
÷2: 60 45 30
÷3: 40 30 20
÷4: 30 22.5 15
÷5: 24 18 12
|
|