练习五十一:序列交换

有两个序列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
原文地址:https://www.cnblogs.com/pinpin/p/10175290.html