Python列出多个数字组合相加的和最接近或等于某个数的算法?
供稿:hz-xin.com 日期:2025-01-14
算法 列出这5个数的所有组合,找出组合的和减268的绝对值最小的组合,
完整的Python程序如下
import math
def combine(a,n,num):
real_size=int(math.pow(2, n))
min=abs(sum(a)-num)
min_comb=[]
for i in range(real_size):
min_list=[]
total=0
for j in range(n):
if i & (1 << j):
min_list.append(a[j])
total=total+a[j]
if abs(total-num)<=min:
if abs(total-num)==min:
min_comb.append(min_list)
else:
min_comb=[min_list]
min=abs(total-num)
print(min_comb)
a=[110,120,130,140,150]
num=268
combine(a,len(a),num)
源代码(注意源代码的缩进)
import itertools
list1 = [110,120,130,140,150]
result = []
min = sum(list1)
for i in range(2,len(list1)+1):
iter = itertools.combinations(list1,i)
for lt in list(iter):
# print(lt)
# print(abs(sum(lt)-268))
if(abs(sum(lt)-268) < min):
min = abs(sum(lt)-268)
result = lt
print("最小值组合:")
print(result)
print("相差绝对值:")
print(min)