题目描述
1483. 某单位进行选举,有5位候选人:zhang、wang、zhao、liu、miao。编写程序,统计每人所得的票数。要求每人的信息里包括两部分:name和votes,分别描述姓名和所得票数。每个人的信息用一个结构体来表示,5个人的信息使用结构体数组。
输入
首先输入一个整数n,表示一张选票,接下来n行,每行是一个由小写英文字母组成的字符串,表示以上5个候选人之一。
输出
输出5行,按zhang、wang、zhao、liu、miao的顺序输出5个候选人的姓名和所得票数,用空格隔开。
样例输入
8
zhang
wang
zhang
zhao
wang
liu
wang
wang
样例输出
zhang 2
wang 4
zhao 1
liu 1
miao 0
方法一:按题上要求定义结构体
#include<stdio.h>
#include<string.h>
struct candidate//candidate是“候选人”的意思
{
char name[16];
int votes;
}can[5]={{"zhang",0},{"wang",0},{"zhao",0},{"liu",0},{"miao",0}},t;//定义5个候选人的成员变量,并为其赋初始值,t用于接收选票
int main()
{
int n,i;
for(i=0;i<5;i++)//测试是否成功为结构体的成员变量赋初始值
{
//printf("候选人%d的名字是:%s,得%d票\n",i+1,can[i].name,can[i].votes);
}
scanf("%d",&n);
while(n--)
{
scanf("%s",t.name);
for(i=0;i<5;i++)//循环比较
{
if(!strcmp(can[i].name,t.name))
{
can[i].votes++;
}
}
}
for(i=0;i<5;i++)//循环输出
{
printf("%s %d\n",can[i].name,can[i].votes);
}
}
#include<string.h>
struct candidate//candidate是“候选人”的意思
{
char name[16];
int votes;
}can[5]={{"zhang",0},{"wang",0},{"zhao",0},{"liu",0},{"miao",0}},t;//定义5个候选人的成员变量,并为其赋初始值,t用于接收选票
int main()
{
int n,i;
for(i=0;i<5;i++)//测试是否成功为结构体的成员变量赋初始值
{
//printf("候选人%d的名字是:%s,得%d票\n",i+1,can[i].name,can[i].votes);
}
scanf("%d",&n);
while(n--)
{
scanf("%s",t.name);
for(i=0;i<5;i++)//循环比较
{
if(!strcmp(can[i].name,t.name))
{
can[i].votes++;
}
}
}
for(i=0;i<5;i++)//循环输出
{
printf("%s %d\n",can[i].name,can[i].votes);
}
}
因为oj采用黑箱测试,所以我们即使不定义结构体,也是可以通过测试数据的。
方法二:不采用结构体,直接比较
#include<stdio.h>
#include<string.h>
int main()
{
char name[6];
int i,n,zhang=0,wang=0,zhao=0,liu=0,miao=0;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
memset(name,0,sizeof(name));
scanf("%s",name);
if(strcmp("zhang",name)==0)
{
zhang=zhang+1;
//printf("\n1\n");
}
if(strcmp("wang",name)==0)
{
wang=wang+1;
//printf("\n2\n");
}
if(strcmp("zhao",name)==0)
{
zhao=zhao+1;
//printf("\n3\n");
}
if(strcmp("liu",name)==0)
{
liu=liu+1;
//printf("\n4\n");
}
if(strcmp("miao",name)==0)
{
miao=miao+1;
//printf("\n5\n");
}
}
printf("zhang%d\nwang%d\nzhao%d\nliu%d\nmiao%d",zhang,wang,zhao,liu,miao);
return 0;
}
方法三:在比较时我们只要比较关键字就行了,没有必要非得两个字符串完全相等
#include<string.h>
int main()
{
char name[6];
int i,n,zhang=0,wang=0,zhao=0,liu=0,miao=0;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
memset(name,0,sizeof(name));
scanf("%s",name);
if(strcmp("zhang",name)==0)
{
zhang=zhang+1;
//printf("\n1\n");
}
if(strcmp("wang",name)==0)
{
wang=wang+1;
//printf("\n2\n");
}
if(strcmp("zhao",name)==0)
{
zhao=zhao+1;
//printf("\n3\n");
}
if(strcmp("liu",name)==0)
{
liu=liu+1;
//printf("\n4\n");
}
if(strcmp("miao",name)==0)
{
miao=miao+1;
//printf("\n5\n");
}
}
printf("zhang%d\nwang%d\nzhao%d\nliu%d\nmiao%d",zhang,wang,zhao,liu,miao);
return 0;
}
方法三:在比较时我们只要比较关键字就行了,没有必要非得两个字符串完全相等
#include<stdio.h>
int
main()
{
int
n,a[5];
char
c[6];
memset
(a,0,
sizeof
(a));
scanf
(
"%d"
,&n);
while
(n--)
{
memset
(c,0,
sizeof
(c));
scanf
(
"%s"
,c);
if
(c[0]==
'z'
)
{
if
(c[3]==
'n'
)
{
a[0]++;
}
else
if
(c[3]==
'o'
)
{
a[2]++;
}
}
else
if
(c[0]==
'w'
)
{
a[1]++;
}
else
if
(c[0]==
'l'
)
{
a[3]++;
}
else
if
(c[0]==
'm'
)
{
a[4]++;
}
}
printf
(
"zhang %d\n"
,a[0]);
printf
(
"wang %d\n"
,a[1]);
printf
(
"zhao %d\n"
,a[2]);
printf
(
"liu %d\n"
,a[3]);
printf
(
"miao %d\n"
,a[4]);
}
/**************************************************************
Problem: 1472
User: 171530425
Language: C
Result: 正确
Time:0 ms
Memory:1092 kb
****************************************************************/