嗶哩嗶哩2018.9.21筆試 紅茶
阿新 • • 發佈:2018-12-11
題目描述
大小姐每天要喝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))