文章目录
【题目描述】
【思路】
【代码】
【题目描述】
链接:选村长题目!!
牛村正在进行村长选举,投票人一人一票,牛可乐是候选人A(投票代号为1)、牛能是候选人B(投票代号为2)和牛妹是候选人C(投票代号为3),其他投票代号无效。
投票列表用以-1表示结束,请分别统计出他们的得票数。谁的得票超过全部投票人数的半数,就输出谁当选为村长,如“A-yes”表示A当选,全部不过半数,输出“all-NO”。
输入描述:
输入一行,若干个整数,以-1结尾
输出描述:
输出五行,前三行表示三个候选人的表票数,然后是总的有效票数,最后一行表示选举结果。
输入
1 1 3 2 1 3 2 1 3 3 1 2 4 1 4 1 2 1 2 1 1 -1
输出
A=10
B=5
C=4
Tot=19
all-NO
【思路】
这道题其实挺简单的,但我真是粗心大意,本来已经输入了一个元素x,又输入了一遍…… 把我整无语了……
说一下思路, 就是用数组计数法就可以了,
也要注意一下输入(我就是输入错了,整半天才发现),因为是以-1结束,所以用while()循环输入,然后去判断x!=-1这件事,在这同时,也要将x出现的次数统计出来(这部分的代码):
while(cin>>x&&x!=-1){
if(x==-1) break;//如果x=-1,那就停止循环
a[x]++;//统计x出现的次数
//统计输入的x的总个数
//因为题目说"谁的得票超过全部投票人数的半数"
//是全部投票人数,所以用一个变量n来统计这个
n++;
}
然后还有一个注意点,题目说超过总投票数的人当村长,所以在判断时,应该写>(大于),而不是>=(大于等于)。
注意点说完(其实也是蛮简单的 ),
【代码】
#include <bits/stdc++.h>
using namespace std;
int x,n,a[1010],s,t,ca,cb,cc;
int main(){
while(cin>>x&&x!=-1){
if(x==-1) break;
a[x]++;
n++;
}
for(int i=1;i<=3;i++){
if(a[i]!=0){
s=s+a[i];
if(i==1){
cout<<"A="<<a[i]<<endl;
ca=a[i];
}
if(i==2){
cout<<"B="<<a[i]<<endl;
cb=a[i];
}
if(i==3){
cout<<"C="<<a[i]<<endl;
cc=a[i];
}
}
}
cout<<"Tot="<<s<<endl;
t=n/2;
if(ca>t){
cout<<"A-yes";
}else if(cb>t){
cout<<"B-yes";
}else if(cc>t){
cout<<"C-yes";
}else{
cout<<"all-NO";
}
return 0;
}