1004 成绩排名 (20 分)
题目:
读入 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
题目没说明n的限制是多少,原本想用vector容器让其自行调整的,结果使用失败了,那就先不用vector过掉再说。
- 至于数据存储,用结构体就好了,整体思路很简单,就不多说。
代码:
1 #include <iostream> 2 #include <string> 3 #define MAXN 1e8 4 using namespace std; 5 6 struct student{ 7 string name; 8 string number; 9 int grade; 10 }stu[150]; 11 12 int main() 13 { 14 int n; 15 cin >> n; 16 for(int i = 0; i < n; i++) 17 { 18 cin >> stu[i].name >> stu[i].number >> stu[i].grade; 19 } 20 int max = 0, min = MAXN; 21 int maxstu, minstu; //用来标记成绩最高和最低的学生 22 for(int i = 0; i < n; i++) 23 { 24 if(stu[i].grade > max) 25 { 26 max = stu[i].grade; 27 maxstu = i; 28 } 29 if(stu[i].grade < min) 30 { 31 min = stu[i].grade; 32 minstu = i; 33 } 34 } 35 cout << stu[maxstu].name << " " << stu[maxstu].number << endl; 36 cout << stu[minstu].name << " " << stu[minstu].number << endl; 37 return 0; 38 }
注释:
- 刚开始用的stu[100]去试,有一个案例标明是段错误,于是猜是太小了,便放到150,就过了。
- 出于好奇,又试了试这组测试用例的上限个数,发现竟是101……