python面试题(1)

有两个序列a,b大小都为n,序列元素的值任意整形数,无序;
a = [1,24,6,100,7]
b = [5,3,200,55,2]

要求:通过交换a,b中的元素,使序列a元素的和与序列b元素的和之间的差最小。

 

解:

 1 #coding:gbk
 2 import itertools  #载入迭代模块
 3 
 4 A = [1,24,6,100,7] 
 5 B = [5,3,200,55,2]
 6 C = A+B             #合并列表
 7 
 8 LC = list(itertools.permutations(C,5))   #生成所有组合
 9 
10 Total = sum(C)      #总和
11 Cha_Min = Total     #初始化最小差
12 Result = []         #初始化结果列表
13 for i in LC:        #遍历所有组合
14     Cha = abs(Total-sum(i)-sum(i))       #计算差
15     if Cha < Cha_Min:                    #如果最小差,则更新结果
16         Result_A = list(i)
17         Cha_Min = Cha
18 
19 for i in Result_A:  #从总列表中删除Result_A列表中元素
20     C.remove(i)
21 
22 Result_B = C       #赋值Result_B
23 
24 print 'Result_A = ',Result_A
25 print 'Result_B = ',Result_B
26 print 'Min_difference = ',Cha_Min

posted @ 2015-07-01 21:46  Welling_wei  阅读(177)  评论(0)    收藏  举报