# -*- coding: cp936 -*-
"""
有兩個序列a,b,大小都為n,序列元素的值任意整形數,無序;要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
1. 將兩序列合并為一個序列,並排序,為序列Source
2. 拿出最大元素Big,次大的元素Small
3. 在餘下的序列S[:-2]進行平分(每次選擇兩個),將大的放在min序列,小的放在max序列
4. 將Small加到max序列,將Big加大min序列,重新計算新序列和,和大的為max,小的為min。
"""
import os
#輸入資料元素
def Input(mylist, n):
print " 請輸入 %d 個數字:" % (n)
for i in range(n):
num = int(raw_input())
mylist.append(num)
#輸出資料元素
def Output(mylist):
lens = len(mylist)
for i in range(lens):
print mylist[i],
#將兩個序列合并成一個序列
def Sum_list(a, b):
return a + b
#從最後第三個元素開始,每次選取兩個,大的放在min序列,小的放在max序
if __name__ == '__main__':
a = []
b = []
n = int(raw_input('請輸入元素個數:'))
print '輸入第一個序列元素:'
Input(a, n)
print '輸入第二個序列元素:'
Input(b, n)
sums = Sum_list(a, b) #定序序列
sums.sort() #序列排序
min = [sums[-1]] #拿出最大元素Big放min,次大的元素Smallmax
max = [sums[-2]]
for i in range(0, len(sums) - 2, 2):
min.append(sums[i])
max.append(sums[i + 1])
print '第一序列:'
Output(a)
print
print '第二序列:'
Output(b)
print
print '交換元素 達到兩序列和的差值最小,交換後的兩序列為(大的在前面):'
n1 = sum(max)
n2 = sum(min)
if n1 > n2:
Output(max)
print
Output(min)
else:
Output(min)
print
Output(max)
print
result = sum(max) - sum(min)
print '他們之差為:%d' % abs(result)