公平席位分批D‘Hondt方法的Python实现

def d_Hondt(p, n):
    r = [[0 for i in range(n)] for i in range(len(p))]
    num_p = len(p)
    for i in range(num_p):
        for j in range(0, n):
            r[i][j] = p[i] / (j + 1)
    a = np.array((r))
    b = a.flatten()
    T = sorted(list(b), reverse=True)
    min = T[n]
    R1 = [0 for i in range(num_p)]
    for i in range(num_p):
        for j in range(0, n):
            if r[i][j] > min: R1[i] = R1[i] + 1
    rest = n - sum(R1)
    k = 0
    for i in range(num_p):
        if k >= rest: break
        for j in range(n):
            if r[i][j] == min:
                R1[i] += 1
                k += 1
                break
    print('d\'Hondt法' + str(R1))

示例:

l=[30,20,10]
d_Hondt(l,10)

结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值