读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:
每个测试输入包含 1 个测试用例,格式为
第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
... ... ...
第 n+1 行:第 n 个学生的姓名 学号 成绩
其中姓名
和学号
均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112
唉,这么简单的题也是被我踩了许多坑。
现总结几点:
1、刚开始想用字符数组的指针存各个字符串的首地址,因为考虑到这个只需要进行存储和读取,不需要修改,最后以为一直错误是在这个二重指针不会用。换了字符数组的方法,实际上错不在这。可以用指针进行优化。
2、pat也是真够细的,最后测试点刚好卡在输入长度是10个字符的,导致之前出错的原因是数组长度不够存放\0。唉,只能怪自己不够熟练,多踩踩坑。
3、不算太难,直接上代码。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,grade,max=-1,min=101,maxi,mini;
char name[100][11],num[100][11];
scanf("%d",&n);
for(i=0;i<n;i++)
{ scanf("%s",name[i]);
scanf("%s",num[i]);
scanf("%d",&grade);
if(max<grade)
{
max=grade;
maxi=i;
}
if(min>grade)
{
min=grade;
mini=i;
}
}
printf("%s %s\n",name[maxi],num[maxi]);
printf("%s %s\n",name[mini],num[mini]);
return 0;
}