#include <iostream> #include <vector> #include <algorithm> #include <cmath> #include <map> int main() { int n, m; std::cin >> n >> m; std::vector<std::vector<int>> scores(n, std::vector<int>(m)); std::vector<int> finalScores(n); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { std::cin >> scores[i][j]; } // 去掉一个最高分和一个最低分 std::sort(scores[i].begin(), scores[i].end()); scores[i].pop_back(); scores[i].erase(scores[i].begin()); // 计算平均得分(向上取整) finalScores[i] = ceil(std::accumulate(scores[i].begin(), scores[i].end(), 0) / static_cast<double>(m - 2)); } // 找出最高得分 int maxScore = *std::max_element(finalScores.begin(), finalScores.end()); // 找出得到最高得分的选手编号 std::map<int, int> winners; for (int i = 0; i < n; i++) { if (finalScores[i] == maxScore) { winners[i + 1]++; } } // 输出最后得分 for (int i = 0; i < n; i++) { std::cout << finalScores[i] << std::endl; } // 输出排名第一的选手编号 for (const auto& winner : winners) { std::cout << winner.first << " "; } std::cout << std::endl; return 0; } 使用二维数组,禁用vector
时间: 2024-04-18 12:26:18 浏览: 113
网络安全业务竞赛
如果你想使用二维数组而不是vector,可以通过以下方式修改代码:
```cpp
#include <iostream>
#include <algorithm>
#include <cmath>
#include <map>
int main() {
int n, m;
std::cin >> n >> m;
int scores[n][m];
int finalScores[n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
std::cin >> scores[i][j];
}
// 去掉一个最高分和一个最低分
std::sort(scores[i], scores[i] + m);
int sum = 0;
for (int j = 1; j < m - 1; j++) {
sum += scores[i][j];
}
// 计算平均得分(向上取整)
finalScores[i] = ceil(sum / static_cast<double>(m - 2));
}
// 找出最高得分
int maxScore = *std::max_element(finalScores, finalScores + n);
// 找出得到最高得分的选手编号
std::map<int, int> winners;
for (int i = 0; i < n; i++) {
if (finalScores[i] == maxScore) {
winners[i + 1]++;
}
}
// 输出最后得分
for (int i = 0; i < n; i++) {
std::cout << finalScores[i] << std::endl;
}
// 输出排名第一的选手编号
for (const auto& winner : winners) {
std::cout << winner.first << " ";
}
std::cout << std::endl;
return 0;
}
```
这样修改后,你可以使用二维数组来存储评委的打分情况,并进行后续的计算和输出。希望对你有帮助!
阅读全文