参考代码:

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;


// 定义一个结构体来表示候选人

struct Candidate {

    int id;      // 报名号

    int score;   // 笔试成绩

};


// 自定义排序规则:先按成绩降序排序,如果成绩相同,则按报名号升序排序

bool compareCandidates(const Candidate& a, const Candidate& b) {

    if (a.score == b.score) {

        return a.id < b.id;  // 如果成绩相同,按报名号升序排列

    }

    return a.score > b.score;  // 按成绩降序排列

}


// 选择符合条件的候选人并输出结果

void selectCandidates(int totalCandidates, int plannedAdmissions, vector<Candidate>& candidates) {

    // 计算面试分数线位置,面试分数线是前 150% 名的候选人

    int interviewPosition = (plannedAdmissions * 150) / 100;  // 向下取整

    

    // 对候选人按成绩降序排序,如果成绩相同则按报名号升序排序

    sort(candidates.begin(), candidates.end(), compareCandidates);

    

    // 找到面试分数线的成绩

    int interviewScore = candidates[interviewPosition - 1].score;


    // 输出面试分数线的成绩以及符合条件的候选人数量

    cout << interviewScore << " ";

    

    // 筛选出所有成绩 >= 面试分数线的候选人

    vector<Candidate> qualifiedCandidates;

    for (const Candidate& candidate : candidates) {

        if (candidate.score >= interviewScore) {

            qualifiedCandidates.push_back(candidate);

        }

    }

    

    // 输出符合条件的候选人数

    cout << qualifiedCandidates.size() << endl;

    

    // 输出所有进入面试的候选人信息

    for (const Candidate& candidate : qualifiedCandidates) {

        cout << candidate.id << " " << candidate.score << endl;

    }

}


int main() {

    int n, m;

    cin >> n >> m;  // 输入总报名人数 n 和计划录取人数 m

    

    vector<Candidate> candidates(n);

    

    // 输入每个候选人的报名号和笔试成绩

    for (int i = 0; i < n; ++i) {

        cin >> candidates[i].id >> candidates[i].score;

    }

    

    // 调用函数处理并输出符合条件的候选人

    selectCandidates(n, m, candidates);

    

    return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论