#PYTHON# 合起来,凑万元开票

需要将图片中的金额,不限数量,凑到10000元整
合起来,凑一万元开票用

img


@Python mx花花

来个简单,全组合遍历,要跑比较久 , 部分数据出来了

img

num_list = [1646.96,2058.7,596,596,6860,1960,6860,5572.8,1078.8,11160,6860,2838,2009,3016.88,10560,2912,1646.96,823.48,823.48,823.48,1646.96,2380,1188,4760,4296.32,4860,3117.8,17050.3,8400,25764,5580,6480,35836,4960,7632,2792,3307.6,6480,6860,7632,3950,8400,10320,3293.92,12561.6,35836,3950,1646.96,3307.6,6860,4104.8,10677,5338.5,3304,4200,2940,10485,4955,4200,3240,2160,8388,2058.7,60000,3950,9993.2,11650,4202,10560,7140,5580,3360,35836,1218,1190,5440,5580,3343.2,1290,5355,19200,5580,4760,70800,4860,9380]
for n in num_list:
    if n > 10000:
        num_list.remove(n)
print(len(num_list))
def test(nums):
    from itertools import combinations
    result = []
    cnt = 0
    for l in range(1,len(nums)):
        cdata = combinations(nums, l)
        for i in cdata:
            if sum(list(i)) == 10000:
                print(list(i))
            cnt = cnt + 1
            result.append(list(i))
    return result,cnt


data,cnt  = test(num_list)
print(len(data))
print(cnt)


????

把 数值直接贴出来呗。
就像这样

lst = [1646.96,2058.7, .....  6480]

有条语句要调整,不然内存会爆


num_list = [1646.96,2058.7,596,596,6860,1960,6860,5572.8,1078.8,11160,6860,2838,2009,3016.88,10560,2912,1646.96,823.48,823.48,823.48,1646.96,2380,1188,4760,4296.32,4860,3117.8,17050.3,8400,25764,5580,6480,35836,4960,7632,2792,3307.6,6480,6860,7632,3950,8400,10320,3293.92,12561.6,35836,3950,1646.96,3307.6,6860,4104.8,10677,5338.5,3304,4200,2940,10485,4955,4200,3240,2160,8388,2058.7,60000,3950,9993.2,11650,4202,10560,7140,5580,3360,35836,1218,1190,5440,5580,3343.2,1290,5355,19200,5580,4760,70800,4860,9380]
for n in num_list:
    if n > 10000:
        num_list.remove(n)
print(len(num_list))
def test(nums):
    from itertools import combinations
    result = []
    cnt = 0
    for l in range(1,len(nums)):
        print('选{}项'.format(l))
        cdata = combinations(nums, l)
        for i in cdata:
            if sum(list(i)) == 10000:
                print(list(i))
                result.append(list(i))
            cnt = cnt + 1

    return result,cnt


data,cnt  = test(num_list)
print(len(data))
print(cnt)