首页 > 其他 > 详细

练习五十一:序列交换

时间:2018-12-25 17:53:00      阅读:138      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!