PYthon中实现候选数字自由组合(和重复)之和为目标数

PYthon中实现候选数字自由组合(和重复)之和为目标数

下图为具体需求
在这里插入图片描述

from itertools import combinations
a, t, T = input("请输入一组数(以逗号隔开):"), eval(input("请输入一个目标数:")), 0
a = [int(n) for n in a.split(',')]  # 以逗号隔开输入值
lists = []  # 临时存储输入值
list0 = []  # 临时存储有重复的排列
list1 = []  # 存储无重复的排列
list2 = []  # 输出值
lists.append(a)  # 导入a
lists_min = min(lists[0])
time = t // lists_min  # 计算出输出最大个数
lists[0].append(0)  # 加入0
lists[0] = lists[0] * time  # 满足m**n条件
com = list(combinations(lists[0], time))
com = list(set(com))  # 初步排重
L = len(com)  # 得到初步排重的长度
for n in range(L):
    list0.append(sorted(com[n]))
for i in list0:
    if not i in list1:
        list1.append(i)
L = len(list1)
for x in range(L):
    for y in range(time):
        T += list1[x][y]
    if T == t:
        list2.append(list1[x])
    T = 0
L = len(list2)
for i in range(L):
    while 0 in list2[i]:
        list2[i].remove(0)
print(list2)

运行结果

请输入一组数(以逗号隔开):2,3,5,4,1
请输入一个目标数:6
[[1, 1, 2, 2], [1, 2, 3], [1, 5], [1, 1, 1, 1, 2], [2, 2, 2], [1, 1, 1, 3], [1, 1, 4], [3, 3], [2, 4], [1, 1, 1, 1, 1, 1]]
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值