可以不用在比较学号大小,默认输入学号就是从小到大。
by ZTT1014 @ 2024-03-22 23:06:13
```
#include<bits/stdc++.h>
using namespace std;
struct node{
int a,b,c,d;
}k[10001];
bool cmp(node x, node y){
if(x.b+x.c+x.d<y.b+y.c+y.d)return 0;
else if(x.b+x.c+x.d>y.b+y.c+y.d)return 1;
else if(x.b+x.c+x.d==y.b+y.c+y.d){
if(x.b<y.b)return 0;
else if(x.b>y.b)return 1;
else if(x.b==y.b){
if(x.a>y.a)return 0;
else if(x.a<y.a)return 1;
}
}
}
int main(){
int s;
cin>>s;
for(int i=1;i<=s;i++){
cin>>k[i].b>>k[i].c>>k[i].d;
k[i].a=i;
}
sort(k+1,k+s+1,cmp);
for(int i=1;i<=5;i++)
cout<<k[i].a<<' '<<k[i].b+k[i].c+k[i].d<<endl;
return 0;
}
by Parker2023 @ 2024-03-23 21:20:47
```c
#include<stdio.h>
int num[310];
typedef struct student{
int Chinese;
int Math;
int English;
int sum;
int number;
}Stu;
int main()
{
Stu stu[310];
int n,t;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d%d",&stu[i].Chinese,&stu[i].Math,&stu[i].English);
stu[i].sum=stu[i].Chinese+stu[i].Math+stu[i].English;
stu[i].number=i+1;num[i]=i+1;
}
for(int j=0;j<n-1;j++)
{
for(int i=0;i<n-1-j;i++)
{
if(stu[i].sum<stu[i+1].sum)
{
t=stu[i].sum;stu[i].sum=stu[i+1].sum;stu[i+1].sum=t;
t=stu[i].Chinese;stu[i].Chinese=stu[i+1].Chinese;stu[i+1].Chinese=t;
t=stu[i].Math;stu[i].Math=stu[i+1].Math;stu[i+1].Math=t;
t=stu[i].number;stu[i].number=stu[i+1].number;stu[i+1].number=t;
}
else if(stu[i].sum==stu[i+1].sum)
{
if(stu[i].Chinese<stu[i+1].Chinese)
{
t=stu[i].sum;stu[i].sum=stu[i+1].sum;stu[i+1].sum=t;
t=stu[i].Chinese;stu[i].Chinese=stu[i+1].Chinese;stu[i+1].Chinese=t;
t=stu[i].Math;stu[i].Math=stu[i+1].Math;stu[i+1].Math=t;
t=stu[i].number;stu[i].number=stu[i+1].number;stu[i+1].number=t;
}
else if(stu[i].Chinese==stu[i+1].Chinese)
{
if(stu[i].number>stu[i+1].number)
{
t=stu[i].sum;stu[i].sum=stu[i+1].sum;stu[i+1].sum=t;
t=stu[i].Chinese;stu[i].Chinese=stu[i+1].Chinese;stu[i+1].Chinese=t;
t=stu[i].Math;stu[i].Math=stu[i+1].Math;stu[i+1].Math=t;
t=stu[i].number;stu[i].number=stu[i+1].number;stu[i+1].number=t;
}
}
}
}
}
for(int i=0;i<5;i++)
{
printf("%d %d\n",stu[i].number,stu[i].sum);
}
return 0;
}
```
by bu_chi_suan @ 2024-03-29 17:19:21
函数可以简化
```cpp
#include <bits/stdc++.h>
using namespace std;
struct student
{
int yu;
int shu;
int ying;
int zong;
int i;
}si[305];
bool cmp(student a,student b)
{
a.zong=a.yu+a.shu+a.ying;
b.zong=b.yu+b.shu+b.ying;
if(a.zong==b.zong)
{
if(a.yu!=b.yu)
{
return a.yu>b.yu;
}
else
{
return a.i<b.i;
}
}
return a.zong>b.zong;
}
int main()
{
int n;
cin >>n;
for(int i=1;i<=n;i++)
{
cin >>si[i].yu>>si[i].shu>>si[i].ying;
si[i].i=i;
}
sort(si+1,si+n+1,cmp);
for(int i=1;i<=5;i++)
{
cout <<si[i].i<<" "<<si[i].yu+si[i].shu+si[i].ying<<endl;
}
return 0;
}
```
by efdfw @ 2024-03-31 21:21:08
@[ZTT1014](/user/1047386) 感谢
by Main_Void_ @ 2024-04-02 20:11:46
@[Parker2023](/user/1250654) cmp函数觉得有点繁杂了,但是谢谢大佬了
by Main_Void_ @ 2024-04-02 20:12:53
@[bu_chi_suan](/user/1314163) 我觉得还是写一个cmp的函数看着能简单一点 ,谢谢了
by Main_Void_ @ 2024-04-02 20:13:42
@[efdfw](/user/1295871) 这个 != 确实学到了 感谢大佬
by Main_Void_ @ 2024-04-02 20:14:20