題目描述
LCY買個n束花準備送給她暗戀的女生,但是他不知道這個女生是否喜歡他。這時候一個算命先生告訴他讓他查花瓣數,第一個花瓣表示"愛",第二個花瓣表示"不愛",第三個花瓣表示"愛".....
為了使最后結果是"愛",LCY需要從n束花中選出一些,你能幫他算出最后他送給這個女生的花中最多包含多少個花瓣嗎?
輸入:
首先輸入一個整數T,表示測試實例的個數。
接下來T組測試實例,每組實例首先輸入一行,包括一個整數n(1 <= n <= 100)。
然后輸入一行,n個數a1,a2...an(1 <= ai <= 100),表示每束花包含的花瓣的個數。
輸出:
每組實例輸出一個整數,表示LCY最多能送多少個花瓣給這個女生。
樣例輸入?Copy
3 1 1 1 2 3 5 6 7
樣例輸出?Copy
1 0 13
提示:每一束花不允許去掉一些花瓣再送。這樣算命就不準了-_-#
思路:解決這個問題,理清兩點即可,即所有的花瓣數量之和是奇數還是偶數的問題,
1.當所有花瓣數量之和為奇數時,則直接輸出和即可。
2.當所有花瓣數量之和為偶數時,有兩種情況,第一種情況所有的花束的花瓣數量都是偶數,這種情況輸出0即可,第二種情況是部分花束的花瓣數量為奇數,部分為偶數,這種情況只需用所有花瓣數量之和減去花束中最小的的奇數花瓣數量即為最大花瓣數。
程序代碼
#include<stdio.h>
int main(){int T;scanf("%d",&T);//輸入一個整數T表示測試的案例數while(T--){int n;//輸入一個整數n表示花束數量scanf("%d",&n);int a[n];//定義一個數組a用來存儲每一束花的花瓣數int sum=0;int min=100;for(int i=0;i<n;i++){scanf("%d",&a[i]);//輸入每束花的花瓣數sum+=a[i];if(a[i]%2!=0&&a[i]<min){//找到最小的奇數,并賦值給minmin=a[i];}}if(sum%2!=0) printf("%d\n",sum);//當所有花瓣之和為奇數時,輸出sumelse if(min==100) printf("0\n");//當min的值不變,說明所有花的花瓣都為偶數,則輸出0else printf("%d\n",sum-min);//當所有花瓣的和為偶數時,就減去最小的那個奇數,得到最大的奇數花瓣數}return 0;
}