|
|
发表于 2023-10-27 21:09:12
|
显示全部楼层
你的代码有一个小错误,在对年级进行排序的时候,你需要比较的是当前学生和下一个学生的年级,但你不小心写成了两次当前学生的年级,所以排序没有正确地执行。修改后的代码如下:
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int n,a[200][2],i,j,t;
- cin>>n;
- for(i=0;i<n;i++)
- {
- cin>>a[i][0]>>a[i][1];
- }
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-i-1;j++)
- {
- if(a[j][0]<a[j+1][0])
- {
- t=a[j][0];a[j][0]=a[j+1][0];a[j+1][0]=t;
- }
- }
- }
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-i-1;j++)
- {
- if(a[j][0]==a[j+1][0])
- {
- if(a[j][1]>a[j+1][1]) // 这里应该比较 a[j][1] 和 a[j+1][1]
- {
- t=a[j][1];a[j][1]=a[j+1][1];a[j+1][1]=t;
- }
- }
- }
- }
- for(i=0;i<n;i++)
- {
- int s=0;
- for(j=0;j<i;j++)
- {
- if(a[i][1]>a[j][1]) s++;
- }
- cout<<s<<endl;
- }
- }
复制代码
上述代码中的比较应该是 if(a[j][1]>a[j+1][1]),而不是 if(a[j][1]>a[j][1])。这样,你的代码才能正确地对成绩和年级进行排序。
然而,这个问题的解决方案可能仍然不会得到预期的结果,因为在排名计算中并未考虑到成绩的因素,只是单纯地比较了年级。这可能并不符合题目的意图。你可能需要重新审视你的解决方案,确保它能满足题目的要求。 |
|