- 有两个长度一样列表a和b,它们里面的元素都是整形的数值,要求:通过交换两个列表的元素,使得sum(a) 和 sum(b)的差值最小
(华为06年面试题)
import math
li1 = [1,4,8,58,45,12,63,40,70]
li2 = [2,3,0,7,49,62,33,78,960]
def exchange(a,b):
c = a
a = b
b = c
return [a,b]
def a(li1,li2):
if type(li1) == list and isinstance(li1,list) and len(li1) == len(li2):
a1 =math.fabs(sum(li1)-sum(li2))
for i in range(len(li1)):
for j in range(len(li2)):
li1[i],li2[j] = li2[j],li1[i]
if math.fabs(sum(li1)-sum(li2)) < a1:
a1 =math.fabs(sum(li1)-sum(li2))
else :
li1[i],li2[j] = exchange(li1[i],li2[j])
li1.sort()
li2.sort()
print(li1)
print(li2)
print('列表1的和:',sum(li1))
print('列表2的和:',sum(li2))
print('两列表和的差的绝对值:',math.fabs(sum(li1)-sum(li2)))
return li1,li2
else:
print('输入参数有误,请重新输入')
li1,li2 = a(li1,li2)
print(li1)
print(li2)