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……

 

posted @ 2019-07-04 18:25  Anzer  阅读(846)  评论(0编辑  收藏  举报