已知某个班有n(1 <= n <= 100)个学生,输入每行为学生姓名(最多20个字符)和其c语言成绩(0~100),请找出最高分和最低分输出,若最高分或最低分多于1个的,按先后顺序输出。
输入格式:
输入有多行,每行表示一个学生的信息,包括姓名和成绩,空格隔开。
输出格式:
输出最高分和最低分,多于1个的按出现的顺序依次输出,格式详见输出样例。
输入样例:
Zhangsan 80
Lisi 95
Zhouyi 69
Wangwu 73
Zhaoliu 69
输出样例:
Max is 95,name has Lisi
Min is 69,name have Zhouyi,Zhaoliu
解题代码:
#include <stdio.h>
#include <string.h>
struct student
{
char name[20];
int score;
}s[100];
int main()
{
int i,j,b,number,maxk=1,mink=1,k=1;
char a[20];
for(i=0;scanf("%s %d",s[i].name,&s[i].score)!=EOF;i++);
number=i;
for(i=1;i<number;i++)
for(j=0;j<number-1;j++)
if(s[j].score<s[j+1].score)
{
b=s[j].score;
s[j].score=s[j+1].score;
s[j+1].score=b;
strcpy(a,s[j].name);
strcpy(s[j].name,s[j+1].name);
strcpy(s[j+1].name,a);
}
for(i=1;i<number;i++)
if(s[i].score==s[0].score)
maxk++;
for(i=number-2;i>=0;i--)
if(s[i].score==s[number-1].score)
mink++;
if(maxk==1)
printf("Max is %d,name has %s\n",s[0].score,s[0].name);
if(maxk>1)
{
printf("Max is %d,name have %s",s[0].score,s[0].name);
for(i=1;i<maxk;i++)
printf(",%s",s[i].name);
printf("\n");
}
if(mink==1)
printf("Min is %d,name has %s\n",s[number-1].score,s[number-1].name);
if(mink>1)
{
printf("Min is %d,name have %s",s[number-mink].score,s[number-mink].name);
for(i=number-mink+1;i<number;i++)
printf(",%s",s[i].name);
printf("\n");
}
return 0;
}