参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复