链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
中国地质大学(武汉)坐落于南望山下毗邻东湖风景区。为了庆祝“华为杯”中国地质大学(武汉)第十七届ICPC程序设计大赛暨华中地区部分高校第十五届ICPC邀请赛竞赛的举办,校园中开展了许多有趣的热身小活动。 HW\ HW HW听到这个消息非常激动,他赶忙去参加了糖果俱乐部的活动。该活动的规则是这样的:摊位上有 n\ n n堆糖果,第 i\ i i堆糖果有aia_iai个,参与的同学可以选择其中的任意堆,当所选择糖果的总数为偶数就可以把它们都带走啦~试问通过这个活动小 HW\ HW HW最多能在摊位上带走多少枚糖果。
输入描述:
第1行 输入一个整数 n(n≤100),代表共有 n堆糖果。
第2行 依次输入 n个整数ai ( ai≤100000),代表每堆糖果的数量。
输出描述:
输出一个整数,代表小HW最多能取得的糖果。
示例1
输入
复制4 1 2 3 4
4 1 2 3 4
输出
复制10
解析:理解题意:
1.有n堆糖果,也就是我们首先要输入n堆,cin>>n;
2.每堆有ai个糖果,所以我们用数组储存这些糖果的数目。
3.因为随便取,就先将糖果总数取和,sum+=a[i];
最后根据输入案例判断如果n堆糖果里糖果数目为奇数的堆有偶数个(用ans来计数),则最终结果为sum(比如案例1中1.2.3.4,(1.3)为奇数个,总共有两个堆,为偶数,最终结果就是sum。)如果最终有奇数个堆,还要取最大的糖果数,则总数sum要减去最少的为奇数的糖果数(比如1.2.3.4.5,sum=15,最后要减去1等于14,这就是最大的糖果数。)
代码如下
#include<iostream>
using namespace std;
int n,a[1000001],sum=0,minn=100010,ans=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
if(a[i]%2!=0){
ans++;
minn=min(a[i],minn);
}
if(ans%2==0){
cout<<sum<<endl;}
else cout<<sum-minn<<endl;
return 0;
}
示例2
输入
复制8 10 11 10 10 10 10 10 10
8 10 11 10 10 10 10 10 10
输出
复制70