塔木德分财产,有图,快速过关

跳转详细版
如下图所示,我的思路:

  1. 当财产小于债权之和一半时,从最低层级债权开始逐层满足;
  2. 当财产 大于等于 债权一半时,从债权最高者到最低者逐层分配;
  3. 当财产大于债权之和时(图片没给出这种情况),所有人均分额外财产。在这里插入图片描述
    在这里插入图片描述

python代码(思路有了,代码很简单)

  1. 当财产不足所有人债权之和一半时
if money<sum_rights/2:
    l3=[]
    for i in range(n):
        if money>l2[i]*(n-i):
            for j in range(i,n):
                l3[j]=l2[i]
            money-=( l2[i]*(n-i) )
        else:
            for j in range(i,n):
                l3[j]+=money/(n-i)
            print('分配列表',l3)
            break
  1. 当超过一半时
elif (sum_rights/2)<=money<sum_rights:
    l3=l2
    money-=(sum_rights/2)
    for i in range(1,n):
        if money>(l2[n-i] - l2[n-i-1])*i:
            for j in range(n-i,n):
                l3[j]+=(l2[n-i] - l2[n-i-1])
            money-=(l2[n-i] - l2[n-i-1])*i
        else:
            for j in range(n-i,n):
                l3[j]+=money/i
            print('分配列表',l3)
            money=0
            break
    if money!=0:#前面的循环是1~n-1层,最后一层单独在此分配
        l3=[i+money/n for i in l3]
        print('分配列表',l3)
  1. 当超过债权之和时
else:
    each_add=(money-sum_rights)/n
    l3=[i+each_add for i in l]
    print('分配列表',l3)

完整代码,循环实现

#输入:财产、人数、债权
money=float(input('财产(float):'))
n=int(input('人数:'))
l=[]
for i in range(1,n+1):
    l.append(int(input("债权%d (int):"%i)))
l.sort()#债权从小到大排序
print('债权列表',l)
sum_rights=sum(l)
l2=[i/2 for i in l]#债权一半
#当财产小于债权之和一半时
if money<sum_rights/2:
    print()
    l3=[]
    for i in range(n):
        if money>l2[i]*(n-i):
            for j in range(i,n):
                l3[j]=l2[i]
            money-=( l2[i]*(n-i) )
        else:
            for j in range(i,n):
                l3[j]+=money/(n-i)
            print('分配列表',l3)
            break
#当财产 大于等于 债权一半时
elif (sum_rights/2)<=money<sum_rights:
    l3=l2
    money-=(sum_rights/2)
    for i in range(1,n):
        if money>(l2[n-i] - l2[n-i-1])*i:
            for j in range(n-i,n):
                l3[j]+=(l2[n-i] - l2[n-i-1])
            money-=(l2[n-i] - l2[n-i-1])*i
        else:
            for j in range(n-i,n):
                l3[j]+=money/i
            print('分配列表',l3)
            money=0
            break
    if money!=0:#前面的循环是1~n-1层,最后一层单独在此分配
        l3=[i+money/n for i in l3]
        print('分配列表',l3)
#当财产大于债权之和时
else:
    each_add=(money-sum_rights)/n
    l3=[i+each_add for i in l]
    print('分配列表',l3)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值