[題目描述]
為了慶祝“華為杯”的舉辦,校園中開展了許多有趣的熱身小活動。小理聽到這個消息非常激動,他趕忙去參加了糖果俱樂部的活動。
該活動的規則是這樣的:攤位上有?n?堆糖果,第?i?堆糖果有?ai??個,參與的同學可以選擇其中的任意堆,當所選擇糖果的總數為偶數就可以把它們都帶走啦~
試問通過這個活動小理最多能在攤位上帶走多少枚糖果。
輸入格式:
輸入共兩行。
第1行 輸入一個整數?n?,代表共有?n?堆糖果。
第2行 依次輸入?n?個整數?ai??,代表每堆糖果的數量。
輸出格式:
輸出一個整數,代表小理最多能取得的糖果。
樣例輸入#1
4
1 2 3 4
樣例輸出#1
10
樣例輸入#2
8
10 11 10 10 10 10 10 10
樣例輸出#2
70
數據范圍
對于 100%?的數據,保證?n≤100?且 ai?≤100000?。
來源/分類(難度系數:一星)
完整代碼展示:
a=int(input())
b=list(map(int,input().split()))
c=[]
d=[]
for i in range(0,len(b)):
? ? if b[i]%2==0:
? ? ? ? c.append(b[i])
? ? else:
? ? ? ? d.append(b[i])
d.sort()
if len(d)%2==0:
? ? sum=sum(c)+sum(d)
else:
? ? sum=sum(c)+sum(d)-d[0]
print(sum)
代碼解釋:
“a=int(input())
?b=list(map(int,input().split()))
?c=[]
?d=[]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ”,讓用戶輸入糖果的堆數a。建立一個列表b,儲存各堆糖果的具體糖果數。建立空列表c和d(各用來儲存糖果數為偶數和奇數的糖果堆)。
“for i in range(0,len(b)):
? ? ? ? if b[i]%2==0:
? ? ? ? ? ? ? c.append(b[i])
? ? ? ? else:
? ? ? ? ? ? ? d.append(b[i])? ”,遍歷列表b中元素(各糖果堆的糖果數),如果為偶數,則將其添加進列表c中;否則將其添加進列表d中。直至遍歷完b中所有元素,循環結束。
“d.sort()
?if len(d)%2==0:
? ? ?sum=sum(c)+sum(d)
?else:
? ? ?sum=sum(c)+sum(d)-d[0] ”,對列表d中元素進行升序排序,如果列表d的長度為偶數,則能帶走的最多糖果數為列表c與列表d中所有元素的總和;否則能帶走的最多糖果數為列表c與列表d中除第一項的所有元素的總和。(這里蘊含一個數學基本原理:奇數+奇數=偶數,偶數+偶數=偶數,奇數+偶數=奇數,因此欲求為偶數的最大總和,可先求出所有偶數的總和(列表c中所有元素的總和),再加上盡可能多的偶數個奇數的和(列表d中元素個數為偶數,全加;為奇數,不加最小的一項d[-1]))
“print(sum)? ? ? ?”,打印最終結果(為偶數的最大總和)。
運行效果展示:
?