# pat A1083

pat甲 1083 List Grades (25 分)

Given a list of N student records with name, ID and grade. You are supposed to sort the records with respect to the grade in non-increasing order, and output those student records of which the grades are in a given interval.

Input Specification: Each input file contains one test case. Each case is given in the following format:

N name ID grade name ID grade ... ... name[N] ID[N] grade[N] grade1 grade2 where name[i] and ID[i] are strings of no more than 10 characters with no space, grade[i] is an integer in [0, 100], grade1 and grade2 are the boundaries of the grade's interval. It is guaranteed that all the grades are distinct.

Output Specification: For each test case you should output the student records of which the grades are in the given interval [grade1, grade2] and are in non-increasing order. Each student record occupies a line with the student's name and ID, separated by one space. If there is no student's grade in that interval, output NONE instead.

Sample Input 1: 4 Tom CS000001 59 Joe Math990112 89 Mike CS991301 100 Mary EE990830 95 60 100 Sample Output 1: Mike CS991301 Mary EE990830 Joe Math990112 Sample Input 2: 2 Jean AA980920 60 Ann CS01 80 90 95 Sample Output 2: NONE

## 解题思路

①：创建考生结构体,用vector为作为结构体数组

``````struct student
{
string name, id;
int grade;
student(string _name,string _id,int _grade) //构造函数
{
name = _name;
id = _id;
grade = _grade;
}
};
``````

②：按成绩排序函数

``````bool cmp(student a,student b)
{
return a.grade > b.grade;
}
``````

③：按题目题目要求输出，无输出结果需要输出"NONE"_

## AC代码

``````#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct student
{
string name, id;
int grade;
student(string _name,string _id,int _grade)
{
name = _name;
id = _id;
grade = _grade;
}
};

bool cmp(student a,student b)
{
return a.grade > b.grade;
}

int main()
{
int n;
vector<student> sque;
string name, id;
int grade, minGrade, maxGrade;
scanf("%d", &n);
for (int i = 0; i < n;i++)
{
cin >> name >> id >> grade;
sque.push_back(student(name, id, grade));
}
sort(sque.begin(), sque.end(), cmp);
scanf("%d%d", &minGrade, &maxGrade);
bool flag = false;
for (int i = 0; i < n;i++)
{
if(sque[i].grade>=minGrade&&sque[i].grade<=maxGrade)
{
cout << sque[i].name << " " << sque[i].id << endl;
flag = true;
}
}
if(flag==false)
printf("NONE");
return 0;
}
``````