[C++] PAT乙级1004. 成绩排名 (20/20)
/*
1004. 成绩排名 (20)
读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:每个测试输入包含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.注意unsigned在本题中对于max赋初始值(m<0时)不适用,所以不推荐。
*/
#include <stdio.h>
using namespace std;
const int MAXLENGTH = 20;
struct Student{
char sname[MAXLENGTH];//student's name
char sno[MAXLENGTH];//student's no
int score;//course score
}max,min,tmp;
void print_student(Student *students,int size,int idx){
if(idx == -1){ //print all
for(int i=0;i<size;i++){
printf("%s %s %d\n", students[i].sname, students[i].sno, students[i].score);
}
} else {
printf("%s %s\n", students[idx].sname, students[idx].sno);
}
}
int main()
{
int studentAmount=-1;
scanf("%d", &studentAmount);
max.score = -1;
min.score = 101;
//1.input students' data
//2.record student's index of maximal score or minimal score
while(studentAmount--){
scanf("%s", &tmp.sname);
scanf("%s", &tmp.sno);
scanf("%d", &tmp.score);
if(tmp.score > max.score){
max = tmp;
}
if(tmp.score < min.score){
min = tmp;
}
}
//output students' data
printf("%s %s\n", max.sname, max.sno);
printf("%s %s\n", min.sname, min.sno);
return 0;
}
本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

浙公网安备 33010602011771号