萌新30pts求调

B3968 [GESP202403 五级] 成绩排序

``` #include<bits/stdc++.h> using namespace std; struct stu//定义学生结构体 { int c,m,e; int id; int zf; int p; }s[10001]; int n;//学生个数 bool cmp(stu a,stu b)//排序函数1 { if(a.zf>b.zf) return 1;//总分 if(b.zf>a.zf) return 0; if(a.c+a.m>b.c+b.m) return 1;//语文数学总分 if(a.c+a.m<b.c+b.m) return 0; if(max(a.c,a.m)>max(b.c,b.m)) return 1;//语文数学最高分 if(max(a.c,a.m)<max(b.c,b.m)) return 0; return 0; } bool cmp_2(stu a,stu b)//排序函数2 { return a.id>b.id;//排序学号 } int main() { cin>>n; for(int i=1;i<=n;i++)//输入 { cin>>s[i].c>>s[i].m>>s[i].e; s[i].id=i;//记录学号 s[i].zf=s[i].c+s[i].m+s[i].e;//记录总分 } sort(s+1,s+n+1,cmp); for(int i=1;i<=n;i++) { if(s[i-1].zf==s[i].zf&&(s[i-1].c+s[i-1].m)==(s[i].c+s[i].m)&&max(s[i-1].c,s[i-1].m)==max(s[i].c,s[i].m)) s[i].p=s[i-1].p;//如果总分相同与语文数学总分相同与语文数学最高分相同 else s[i].p=i;//否则按规则排序 } sort(s+1,s+n+1,cmp_2);//再sort一遍学号 for(int i=n;i>=1;i--) { cout<<s[i].p<<endl;//输出排名 } return 0; } ```
by Luowj @ 2024-05-31 20:26:24


@[Luowj](/user/1181602) 谢谢大佬,大概明白了
by douhuazhenren1 @ 2024-05-31 20:32:19


|