码迷,mamicode.com
首页 > 其他好文 > 详细

练习五十一:序列交换

时间:2018-12-25 18:13:36      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:sum   end   ret   之间   class   int   交换   列表   差值   

有两个序列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

练习五十一:序列交换

标签:sum   end   ret   之间   class   int   交换   列表   差值   

原文地址:https://www.cnblogs.com/pinpin/p/10175290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!