小明想当Y国的总统,Y国大选是按各州的投票结果来确定最终的结果的,如果得到超过一半的州的支持就可以当选,而每个州的投票结果又是由该州选民投票产生的,如果某个州超过一半的选民支持小明,则他将赢得该州的支持。现在给出每个州的选民人数,请问小明至少需要赢得多少选民的支持才能当选?
【输入】 输入包含多组测试数据。
每组数据的第一行是一个整数NN(1≤N≤1011≤N≤101),表示Y国的州数,当 N=0N=0 时表示输入结束。
接下来一行包括 NN 个正整数,分别表示每个州的选民数,每个州的选民数不超过 100100。
【输出】 对于每组数据输出一行,表示小明至少需要赢得支持的选民数。
【输入样例】 3 5 7 5 0 【输出样例】 6
这样怎么了:
#include<bits/stdc++.h>
using namespace std;
int a[105];
int main(){
int n,sum=0,x;
cin>>n;
while(n){
sum=0;//计算下一组测试数据前要状态还原,该清零的清零
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
{
cin>>x;
a[x]++;
}
int j=0,t=1;//初始化j洲的数量,t洲的人数
while(!(j==(n/2+1))){//如果没有超过一半以上的支持就加
while(a[t]) {//如果有洲是t人
sum+=t/2+1;//将一半多1的人累加进sum
a[t]--;
j++;
if(j==(n/2+1))//如果中途达到标准则提前退出
break;
}
t++;
}
cout<<sum<<endl;//输出选民人数
cin>>n; //读入下一组测试数据
}
return 0;
}