1. 程式人生 > >嗶哩嗶哩2018.9.21筆試 紅茶

嗶哩嗶哩2018.9.21筆試 紅茶

題目描述

大小姐每天要喝m的量的紅茶,而且每天要把m的量分成兩次來喝。 女僕長手裡有很多杯不同量的紅茶。 輸出所有滿足m的量的紅茶組合方案,並且按照組合中的第一杯紅茶排序輸出。 輸入輸出: 第一行代表紅茶杯個數n 第二行代表,這n個茶杯的量分別是多少 第三行代表大小姐的量m 樣例輸入: 7 2 4 6 1 3 5 7 7 樣例輸出: 1 6 2 5 3 4

PS:本題還有個條件,當沒有方案時,輸出⑨,但本文中忽略此條件。

思路

1.每個茶杯的量都是不一樣的。

2.如果量為m,那麼所有可能方案的個數為m//2(向下取整)。 比如,量為7的所有可能方案即為上面的樣例輸出。個數為7//2=3。 量為8的所有可能方案為: 1 7 2 6 3 5 4 4 個數為8//2=4。 但由於每種劑量的杯只有一個,所有當m為偶數時,不可能有最後一種方案。

3.所以,我們只需要判斷每個可能方案中的兩個數字是否都存在。但由於方案的第二個數字b能由m-a算出來(a代表第一個數字),所以我們就只需要遍歷每個方案的第一個數字,發現遍歷的範圍為0 - m//2,如果m是偶數則是0 - m//2-1(去掉最後一種方案)。

4.判斷方案[a,b]是否存在,先a是否存在,再判斷m-a是否存在,都判斷通過說明該方案存在。

程式碼

n = eval(input())
li = set(map(int,input().split()))
op = eval(input())

s= []

middle = op//2
if(op%2==0):
    middle -=1

for
i in range(1,middle+1): if i in li: re = op-i if re in li: s.append([i,re]) for start,end in s: print(str(start)+' '+str(end))