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)