给定每个州的人口列表,输出从大到小,即该州在选举团中获得的选票数。
输入:第一个数字代表要分配的总票数;其后是和的列表。在此示例中,使用状态的缩写,但是可以使用任何包含大写和小写字母的名称。您可以采用任何喜欢的格式,只要其中包含的唯一信息是该州的缩写及其人口。
输入可以作为函数的参数,也可以采用任何方式。
示例(可能)输入: 538 [[CA 38000000], [NH 1300000] etc.]
输出:以某种格式输出每个州获得的票数。从最大到最小对状态进行排序。如果两个州的票数相同,则按字典中的先后顺序(按字母顺序先后)排序。
在找到投票数之前,首先检查输入列表中是否存在名为DC的州,如果存在,请给该州3票,而不论其人口多少。然后,将其从列表中删除,并分配其余的选票,就好像DC不存在一样。
选举团的票数被定义为参议员和代表人数的总和。每个州都有两名参议员,因此从总数中减去州数两倍(在示例输入中为538)以获得代表人数。为每个州指派一名代表开始。然后,执行以下过程:
分配给每个状态的数目,
A,定义为P/sqrt(2)其中P是人口。根据状态值对状态进行排序
A。为第一个州(最大的州)分配
A一个代表。重新分配
A,as的值A = P/(sqrt(n)*sqrt(n + 1)),其中n是分配给该州的当前代表人数。返回步骤2。重复执行,直到所有代表都用完为止。
示例(可能)输出:{CA: 518, NH: 20}。输出不必采用这种格式,但必须包含相同的信息。
请注意,如果由于3*(# of states)票数不足而无法合法分配票数,请打印所需的任何内容。您可能会崩溃,引发错误等。
测试用例:
538 [['CA' 38000000], ['NH' 1300000]] --> CA: 518, NH: 20
538 [['NH' 1300000], ['CA' 38000000]] --> CA: 518, NH: 20 (must be in order from greatest to least!)
538 [['DC' 1000000], ['RH' 1]] --> RH: 535, DC: 3
100 [['A', 12], ['B', 8], ['C', 3]] --> A: 51, B: 35, C: 14
100 [['A', 12], ['B', 8], ['C', 3], ['D', 0]]: --> [49, 34, 14, 3] (yes, even states with no population get votes)
2 [['A', 1]] --> aasdfksjd;gjhkasldfj2fkdhgas (possible output)
12 [['A', 1], ['B', 2], ['C', 3], ['D', 4]] --> A: 3, B: 3, C: 3, D: 3
42 [['K', 123], ['L', 456], ['M', 789]] --> M: 23, L: 14, K: 5
420 [['K', 123], ['L', 456], ['M', 789]] --> M: 241, L: 140, K: 39
135 [['C', 236841], ['D', 55540], ['G', 70835], ['K', 68705], ['M', 278514], ['Ms', 475327], ['Nh', 141822], ['Nj', 179570], ['Ny', 331589], ['Nc', 353523], ['P', 432879], ['R', 68446], ['Sc', 206236], ['Ve', 85533], ['Vi', 630560]] --> Vi: 20, Ms: 16, P: 14, Nc: 12, Ny: 12, M: 10, C: 9, Sc: 8, Nj: 7, Nh: 6, Ve: 5, D: 4, G: 4, K: 4, R: 4
A为A = P/(sqrt(n)*sqrt(n + 1)),其中n是分配给该州的当前成员数。” 应该将其更改为“A,作为的重新分配值A = P/(sqrt(n)*sqrt(n + 1)),其中n是当前分配给该州的代表人数”。那让我失望了。