这段代码存在以下问题:
1. 缺少头文件引用:需要包含 <iostream> 和 <algorithm> 头文件。
2. 数组越界访问:声明 a[200][2],但实际上数组的长度应为 a[n][2]。
3. 排序算法错误:目前使用的是冒泡排序,但题目要求按分数从高到低排名,成绩相同时按年级从低到高排。冒泡排序只考虑成绩,没有对年级进行排序比较。
4. 年级判断错误:在计算每个学生前面有多少学生年级低于他时,使用了 a[i][1]>a[j][1] 的条件判断,实际上应该是 a[i][1]<a[j][1]。
修正后的代码如下所示:#include <iostream>#include <algorithm>using namespace std;int main() { int n; cin >> n; int a[n][2]; for (int i = 0; i < n; i++) { cin >> a[i][0] >> a[i][1]; } // 按照题目要求排序 sort(a, a + n, [](const int* x, const int* y) { if (x[0] != y[0]) return x[0] > y[0]; else return x[1] < y[1]; }); for (int i = 0; i < n; i++) { int count = 0; for (int j = 0; j < i; j++) { if (a[i][1] < a[j][1]) count++; } cout << count << endl; } return 0;}
注意,在修改代码后,还需要检查其他部分的排版和标点符号是否正确。
球一个最佳答案谢谢啦!这对我非常重要!   |