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[1] ID[1] grade[1] name[2] ID[2] grade[2] ... ... 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;
}

本文章使用limfx的vscode插件快速发布