最近在学习python,记录一下
有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小
直接上代码(python3.6.3):
import math
from itertools import combinations
def ddlook(f,e):
a=f+e
asum=sum(a)
c=len(a)
b=[]
bsum=asum
for i in combinations(a,int(c/2)):
if abs(sum(i)-asum/2)<abs(bsum-asum/2):
b=i
bsum=sum(i)
d=[]
for i in a:
if i not in b:
d.append(i)
dsum=sum(d)
输入两个数组做测试
f=[1,2,3]
e=[4,5,6]
print(ddlook(e,f))
打印结果为:
((4, 5, 1), 10, [6, 2, 3], 11)
心得:再次感受到python扩展库的强大, 这里的combinations是一个遍历穷尽的函数,可以把数组或矩阵的限定数量的列表穷尽出来。在不考虑消耗的情况下,能够快速实现。