每日一题 1004

1004 成绩排名

题目描述

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

输入格式:

每个测试输入包含 1 个测试用例,格式为
第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
… … …
第 n+1 行:第 n 个学生的姓名 学号 成绩

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

输出格式:

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

题目解析:

只需找到成绩最高和最低的学生,在和其学号和姓名对应起来即可。

C++代码:

代码一:使用结构体

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
28
29
#include <iostream>
using namespace std;
int main()
{
//定义一个名字为student的结构体,有三个成员
struct student
{
char a[11];
char b[11];
int grade;
};
//定义三个变量,结构体类型,其中s是所有学生,max是最大值,min是标记最小值的
student s,max,min;
int n;
cin>>n;
cin>>s.a>>s.b>>s.grade;
max=min=s; //先假设最大和最小值是第一个学生
//拿第一个的分数分别和其他n-1个学生相比
for(int i=1;i<n;i++)
{
cin>>s.a>>s.b>>s.grade;
if(s.grade>max.grade) max=s;
if(s.grade<min.grade) min=s;
}
//max和min已经在上边的循环中指向最大最小的学生,在引用它们的成员即可
cout<<max.a<<" "<<max.b<<endl;
cout<<min.a<<" "<<min.b<<endl;
return 0;
}

代码二:

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
28
29
30
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
string a[n+1],b[n+1];
int grade[n];
int max=0,min=100,s,k;//s,k分别记录最大值和最小值的下标
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i]>>grade[i];
}
for(int j=0;j<n;j++)
{
if(grade[j]>max)
{
max=grade[j];
s=j;
}
if(grade[j]<min)
{
min=grade[j];
k=j;
}
}
cout<<a[s]<<" "<<b[s]<<endl;
cout<<a[k]<<" "<<b[k]<<endl;
return 0;
}

文章目录
  1. 1. 1004 成绩排名
    1. 1.1. 题目描述
    2. 1.2. 输入格式:
    3. 1.3. 输出格式:
    4. 1.4. 题目解析:
    5. 1.5. C++代码: