投票を数える時です!
今日、私の全国で地方選挙があります。ここで、各パーティーの座席数は、D'Hondtメソッドを使用して決定されます。あなたの目標は、各パーティが取得する座席数を最短のバイト数で決定するプログラムまたは機能を実装することです。
この方法では、配布するシートの数が固定されており、次のようになります。
- すべての当事者には、獲得した投票数から始まる変数番号が割り当てられます。
- そして、最初のシートは、その変数で最大の値を持つ当事者に与えられ、そのパーティーのための値になることで割っ票のその総数は
1+seats、丸みを帯びたダウン、seatsそれが既に持っている座席の数は(取得した後そうです最初に、彼らの票は2で割られ、2番目の議席を獲得した後は3で割られます)。 - その後、当事者の投票が再度比較されます。このプロセスは、すべての座席が割り当てられるまで続きます。
最大数が2つ以上の関係者の間の同点である場合、ランダムに解決されます(ランダムである必要があり、リストの2つのうちの最初の数だけになることはできません)。
入力
あなたは数受け取るN利用できる座席数、およびあなたが好みの形式で、各当事者は得票のリストを示します。例:
25
12984,7716,13009,4045,1741,1013
出力
各パーティーが獲得した座席のリストを出力する必要があります。上記の例では、次のようになります
8,5,9,2,1,0
入力の関係者と同じ順序である必要があります。
例
5
3,6,1
outputs: 2,3,0
135
1116259,498124,524707,471681,359705,275007,126435
outputs: 45,20,21,19,14,11,5
ボーナス
パーティの名前を入力として受け取り、出力でそれらを与えると、-20%のボーナス、たとえば:
25
cio:12984,pcc:7716,irc:13009,icb:4045,cub:1741,bb:1013
outputs
cio:8
pcc:5
irc:9
icb:2
cub:1
bb:0
私たちは、すでにこのようなものでした感じる
—
edc65
検索で同じようなものを見つけることができませんでした...しかし、何かを見つけた場合、私はそれを変更するか、質問を削除します、問題ありません!
—
ロルク
@rcrmn最後の例に何か問題があります。たぶん、あなたは代わりに135の153合計議席意味
—
Tyilo
@Tyilo Right!テストプログラムで間違って記述し、二重チェックせずに回答をコピーしました。現在修正されています。ありがとうございました!
—
ロルク
@Jakubeに感謝します。これは、計算に使用したプログラムの問題で、ラベル付きの席で注文した出力を返しました。デニスは、ラベルが識別子として機能するため、任意の順序で返すことができます。それはあなたのためにそれが簡単である場合にのみ文字を持っていると仮定することができます。
—
ロルク