有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
1 def list_end(list1,list2): 2 if len(list1) == len(list2): 3 old_num = abs(sum(list1)-sum(list2)) 4 l = len(list1) 5 x,y = 0,0 6 flag = 1 7 while flag: 8 min_num = old_num 9 while x < l: 10 while y < l: 11 list1[x],list2[y] = list2[y],list1[x] #先交换,在计算sum和的差值 12 temp = abs(sum(list1)-sum(list2)) 13 if min_num > temp: #如果差值比原本的小 14 min_num = temp #原本的就等于现在的 15 else: 16 list1[x],list2[y] = list2[y],list1[x] #否则还原回去 17 y += 1 18 y = 0 19 x += 1 20 if min_num == old_num: 21 flag = 0 22 return list1,list2 23 else: 24 return '提供的列表必须长度相同' 25 26 list1 = [99,98,89,12] 27 list2 = [5,4,22,11] 28 print(list_end(list1,list2)) 29 print(abs(sum(list1)-sum(list2)))
执行结果:
([4, 98, 89, 5], [99, 12, 22, 11]) 52