py兩序列和差最小

來源:互聯網
上載者:User

# -*- 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)

      
   
  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.