第一行两个整数 n 和 k,表示有 n 个学生,小 Y 排倒数第 k。第二行 n 个非负整数,表示这 n 个学生的成绩。 【输出】 输出一行,共 k 个数,按成绩从低到高输出,每 2 个数之间用一个空格分隔。(相同成绩按不同排名算)。
时间: 2024-09-27 15:12:46 浏览: 29
内蒙古鄂尔多斯市康巴什新区第二中学七年级数学上册第1章有理数全章小结2无答案新版新人教版
这是一个经典的排序和查找问题,可以通过以下步骤解决:
1. 首先,我们需要读取输入的n和k,以及学生的成绩数组。
2. 排序整个数组,这样我们可以方便地找到前k个最低的成绩。
3. 创建一个新的数组或列表,只包含前k个元素,按照原始顺序保持成绩的相对排名(如果有多人成绩相同,他们之间的相对位置不变)。
4. 最后,遍历这个新的子数组并打印每个成绩,每两个成绩间插入一个空格。
以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int n, k;
std::cin >> n >> k; // 读取n和k
std::vector<int> scores(n);
for (int i = 0; i < n; ++i) {
std::cin >> scores[i]; // 读取学生分数
}
// 对所有成绩进行排序
std::sort(scores.begin(), scores.end());
// 只保留前k个成绩及其相对排名
std::vector<int> result(k);
for (int i = 0; i < k; ++i) {
result[i] = scores[n - 1 - i]; // 注意倒序索引
}
// 打印结果
for (int i = 0; i < k; ++i) {
if (i != 0) {
std::cout << " ";
}
std::cout << result[i];
}
std::cout << '\n';
return 0;
}
```
阅读全文