关于算法-数据结构:PAT甲级1083-List-Grades

2次阅读

共计 998 个字符,预计需要花费 3 分钟才能阅读完成。

题目粗心:

给出 N 位考生的姓名、准考证号及分数,将这些信息按分数从高到低排序,并输入分数在给定区间 [grade1, grade2] 内的考生信息。
如果不存在满足条件的考生,则输入“NONE”。

算法思路:

依据题意,构造体类型 Student 须要寄存考生的姓名、准考证号和分数。因为所有考生的分数都不雷同,排序函数就只需依据分数进行排序即可。
同时应用 isExist 变量来记录是否有存在 [grade1,grade2] 的考生,如果为 false,就输入为 false.

提交后果:

AC 代码:
#include<cstdio>
#include<vector>
#include<algorithm>
#include<string>

using namespace std;

struct Student{
    string name;
    string ID;
    int grade;
};

bool cmpByGrade(Student a,Student b){return a.grade>b.grade;}

int main(){
    int N;// 总人数
    scanf("%d",&N);
    char name[10];
    char id[20];
    vector<Student> students;
    Student student;
    for (int i = 0; i < N; ++i) {scanf("%s %s %d",name,id,&student.grade);
        student.name = name;
        student.ID = id;
        students.push_back(student);
    }
    int grade1,grade2;// 分数的上下界
    scanf("%d %d",&grade1,&grade2);
    sort(students.begin(),students.end(),cmpByGrade);
    bool isExist = false;// 是否有学生在 [grade1,grade2] 区间中
    for (int j = 0; j < students.size(); ++j) {if (students[j].grade>=grade1&&students[j].grade<=grade2){
            isExist = true;
            printf("%s %s\n",students[j].name.c_str(),students[j].ID.c_str());
        }
    }
    if (!isExist){printf("NONE\n");
    }
    return 0;
}

正文完
 0