现有n和n个同学的学号,语文,数学,英语成绩。
按总分从高到低的顺序输出。
如果总分相同,谁的学号在前就排前面。(10000<=n<=1000000)
首先,这题我们不能用多关键字排序,因为用多关键字排序就会超时,所以我们要用结构体。
而且要用scanf和printf(n超过10000,要用scanf和printf)。
话不多说,上代码!!!!!!!
#include<bits/stdc++.h>
using namespace std;
struct cj
{
int xh;
int yw;
int sx;
int yy;
int zf;
}s[1000009];
bool cmp(cj a,cj b)
{
if(a.zf==b.zf) return a.xh<b.xh;
else return a.zf>b.zf;
}
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld%lld",&s[i].xh,&s[i].yw,&s[i].sx,&s[i].yy);
s[i].zf=s[i].yw+s[i].sx+s[i].yy;
}
sort(s+1,s+1+n,cmp);
for(int i=1;i<=n;i++)printf("%lld %lld %lld %lld %lld\n",s[i].xh,s[i].yw,s[i].sx,s[i].yy,s[i].zf);
return 0;
}
记得点赞哦!如果有条件的话,最好可以点个关注哦。