1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 选民投票--统计候选人的得票数

选民投票--统计候选人的得票数

时间:2021-06-29 02:23:15

相关推荐

选民投票--统计候选人的得票数

编程统计候选人的得票数。有若干位候选人(n<=10),候选人姓名从键盘输入(候选人姓名不区分大小写,姓名最长为9个字节),若干位选民,选民每次输入一个得票的候选人的名字(姓名最长为9个字节),若选民输错候选人姓名,则按废票处理。程序自动统计各候选人的得票结果,并按照得票数由高到低的顺序排序。最后输出各选票人得票结果和废票信息。

输入格式:

先输入候选人人数n和n名候选人姓名,再输入选民人数m和m位选民的选票。

输出格式:

先根据选票结果由高到低输出各候选人得票结果,再根据废票情况输出废票信息(换行后,输出提示信息“invalid vote:”,再输出废票信息)。

输入样例1:

3zhangliwang9WangZhangzhuangLILiaoZHANGWANGWangwang

输出样例1:

wang:4zhang:2li:1invalid vote:zhuangLiao

输入样例2:

2liuyang5LiuliuYANGyangLiu

输出样例2:

liu:3yang:2

#include<stdio.h>#include<string.h>struct student{char name[10];int num;}a[11],b[1000],t;//a:用来记录候选人的信息,b来记录票数,t来交换两个结构体int main(){int n,i,p,flag;//p是票数,n存候选人数,flag标志(是否是废票)char c[100];//c是对名字进行确定(保存小写姓名)scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",a[i].name);a[i].num=0;}scanf("%d",&p);for(i=0;i<p;i++){scanf("%s",b[i].name);b[i].num=1;}//每个数归1 for(i=0;i<p;i++)//将票全部变成小写 {int j;//因为,如果是废票需要原样输出所以不能直接对票进行名字的覆盖//要对候选人进行遍历,如果存在名字相同就覆盖,否则不变for(j=0;b[i].name[j]!='\0';j++)//对票的每一个字母的处理并对c赋值{if(b[i].name[j]<='Z'&&b[i].name[j]>='A')c[j]=b[i].name[j]+32;elsec[j]=b[i].name[j];}c[j]='\0';//字符串结束标志for(int l=0;l<n;l++)//即当相同时变小写{if(strcmp(c,a[l].name)==0)strcpy(b[i].name,c);}}for(i=0;i<p;i++)//重新遍历,对票数进行处理{for(int j=0;j<n;j++){if(strcmp(b[i].name,a[j].name)==0){b[i].num=0;//如果有这个票就不是废票num=1,就是废票a[j].num++;}}}//完成了票的一个个遍历,求出了每个人的票数for(i=0;i<n;i++){for(int j=0;j<n-i-1;j++){if(a[j].num<a[j+1].num){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}//冒泡排序,对票数排序 for(i=0;i<n;i++){if(a[i].num)//票数不为零{printf("%s:%d\n",a[i].name,a[i].num);}} flag=0;//标志置零for(i=0;i<p;i++)//来判断是否存在空票来输出那一行{if(b[i].num)flag=1;}if(flag)printf("\ninvalid vote:\n");for(i=0;i<p;i++)//输出废票{if(b[i].num)printf("%s\n",b[i].name);}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。