PAT B1004 成绩排名(C++)

PAT甲级目录 | PAT乙级目录

题目描述

读入 $n(>0)$名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:

每个测试输入包含 1 个测试用例,格式为

1
2
3
4
5
第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
... ... ...
第 n+1 行:第 n 个学生的姓名 学号 成绩

其中 姓名学号 均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出格式:

对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

输入样例:

1
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

输出样例:

1
2
Mike CS991301
Joe Math990112

易错点:

  • 实际上正确的字符串等价于: (‘P’左边’A’的个数) * (中间’A’的个数) = ‘T’右边’A’的个数
  • 中间’A’的个数不少于一个
  • ‘P’和’T’分别只能出现一次

也许陌生的知识点

  • stu(){}
    • 结构体中加上这句后,可以无需声明直接定义一个新的变量
  • stu(string _name, string _id, int _score):name(_name), id(_id), score(_score){}
    • 实现直接用指定参数定义结构体变量
  • bool cmp(stu a, stu b){}
    • 比较函数,可以自定义 sort 时的排序策略
    • 本题中该函数实现按关键字 score 对数组从大到小排序
  • sort(S, S + n, cmp);
    • 排序函数,实现 [first, last) 范围内的排序,可以自定义排序策略 cmp 函数
    • 不带 cmp 参数的 sort 函数实现从小到大排序
    • 所需头文件: algorithm

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct stu{
string name, id;
int score;
stu(){}
stu(string _name, string _id, int _score):name(_name), id(_id), score(_score){}
}S[1000];
bool cmp(stu a, stu b){
return a.score > b.score;
}
int main(){
int n;
cin >> n;
for(int i = 0; i < n; i++){
int score;
string name, id;
cin >> name >> id >> score;
S[i] = stu(name, id, score);
}
sort(S, S + n, cmp);
cout << S[0].name << ' ' << S[0].id << endl;
cout << S[n - 1].name << ' ' << S[n - 1].id << endl;
return 0;
}