题目描述
给定一个包含 N 名学生的姓名,ID,成绩的列表。
请你将表单按照学生成绩由高到低进行排序,并输出成绩在给定间隔内的所有学生信息。
输入格式
输入格式如下:
N
name[1] ID[1] grade[1]
name[2] ID[2] grade[2]
... ...
name[N] ID[N] grade[N]
grade1 grade2
其中 name[i]
和 ID[i]
是长度不超过 10
的不含空格的字符串,grade[i]
是在 [0,100]
范围内的整数。
grade1
和 grade2
是查询成绩区间的左右边界。
保证所有学生的成绩互不相同。
输出格式
按成绩由高到低的顺序,输出所有成绩在 [grade1,grade2]
之间的学生信息。
输出信息包括学生姓名和ID。
如果区间内不存在任何学生,则输出 NONE
。
数据范围
1≤N≤101
样例
输入样例1:
4
Tom CS000001 59
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
60 100
输出样例1:
Mike CS991301
Mary EE990830
Joe Math990112
输入样例2:
2
Jean AA980920 60
Ann CS01 80
90 95
输出样例2:
NONE
算法1
(暴力枚举) $O(n)$
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
struct Student
{
char name[11];
char id[11];
int grade;
} stu[110];
bool cmp(Student a, Student b)
{
return a.grade > b.grade;
}
int main()
{
int N;
cin >> N;
for (int i = 0; i < N; i ++)
{
scanf("%s %s %d", stu[i].name, stu[i].id, &stu[i].grade);
}
int l_grade, r_grade;
cin >> l_grade >> r_grade;
sort(stu, stu + N, cmp);
bool flag = false;
for (int i = 0; i < N; i ++)
{
if (stu[i].grade >= l_grade && stu[i].grade <= r_grade)
{
cout << stu[i].name << ' ' << stu[i].id << endl;
flag = true;
}
}
if (! flag)
{
puts("NONE");
}
return 0;
}