东华OJ基础题90 选票统计

问题描述 :
学生会主席投票选举工作正在举行。本次投票将采用电脑统计选票的方式,当投票选举正式开始后,同学们将排队一 一走到电脑前,投上自己神圣的一票:在电脑前输入一个姓名,然后输入回车表示确认。
投票结束后显示得票最高的同学姓名,该同学将当选为新一届学生会主席。
请编程统计投票。

输入说明 :
输入包含多行,每行是一个由英文字母组成的字符串,表示一个姓名,首尾以及中间都不包含空格。
参加投票学生的人数不超过100人,每个学生姓名字符串的长度小于20。
由于学生投票时输入的姓名有大写有小写,你在统计时不区分大小写,即"Liming"和"liming"是同一个人。

输出说明 :
输出为一个字符串——当选为学生会主席的学生姓名以及他的票数,中间用一个空格分隔。
输入保证没有两个人并列票数最高。
输出的英文字母全部用小写。

输入范例 :
limin
LIMING
liming
wangshan
huyou
LiMing
输出范例:
liming 3
总结
1.与90题不同在于不知道有多少人参与投票(while循环来解决),不知道被投的有哪些(结构数组里面的元素是动态的)。
2.思路:结构数组初始化,名字为空,票数为0----->不断输入一个名字–> 转化成小写字母---->如果是第一次输入,结构数组记录下来,如果不是,则在结构数组中进行比较,查看本次输入与结构数组中是否有相同名字的—>若有,结构数组当前票数加1,跳出比较,若没有则直接将名字赋值给结构数组(也就是说之前没人选过他)。
要记录这是被投的第几个人!!
3.字符串循环输入while(gets(name)),只能有gets 按下CRTL+Z 即可结束

#include<stdio.h>
#include<string.h>
#include<ctype.h>
typedef struct stu{
	char name[21];
	int num;
}STUDENT;
int main(){
	STUDENT stu[101];
	STUDENT max;
	char name[21];
	int i,j,len,b,flag;			
	for(i=0;i<101;i++){	//赋初值名字为空值,票数为0
		strcpy(stu[i].name," ");
		stu[i].num=0;
	}
	
	i=-1;
	while(gets(name)){
		i++;		//保存姓名并进行统计票数
		b=i;
		flag=1;
		len=strlen(name);
		for(j=0;j<len;j++){			//统一将姓名换成小写
			if(isupper(name[j]))
				name[j]+=32;
		}
		if(i==0){				//第一次输入时
			strcpy(stu[i].name,name);
			stu[i].num++;
		}						//若不是第一次
		else{
			for(j=0;j<i;j++){	//循环比较是否“选过”这个人
				if(strcmp(name,stu[j].name)==0){//若有人选过他
					stu[j].num++;//票数加1,跳出比较,标志位记为0
					i=b-1;
					flag=0;
					break;
				}
			}
			if(flag){之前没有选过这个人
				strcpy(stu[i].name,name);
				stu[i].num++;
			}
		}
	}
#if(0)
测试为了输出结构数组中的人以及相应的票数
	for(j=0;j<=i;j++){
		printf("%s %d\n",stu[j].name,stu[j].num);
	}
#endif	
//找出票数最多的
	max=stu[0];
	for(j=1;j<=i;j++){
		if(max.num<stu[j].num)
			max=stu[j];
	}
	printf("%s %d\n",max.name,max.num);
	
	
	return 0;
}




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值