Ewan @ 2021-01-08 21:39:55
#include<iostream>
#include<algorithm>
using namespace std;
int n;
struct node{
int no,c=0,m=0,e=0,total=0;
};
node a[600],c;
bool cmp(node x,node y) {
if(x.total>y.total)return true;
else if(x.total==y.total) {
if(x.c>y.c||x.e>y.e||x.m>y.m) return true;
else return false;
}
else return false;
}
int main() {
cin>>n;
for(int i=0;i<n;i++) {
cin>>a[i].c>>a[i].m>>a[i].e;
a[i].no=i+1;
a[i].total=a[i].c+a[i].m+a[i].e;
}
sort(a,a+n,cmp);
for(int i=0;i<5;i++) {
cout<<a[i].no<<" "<<a[i].total<<endl;
}
return 0;
}
by Sakurakouji_Saika @ 2021-02-23 03:17:00
以下是 鄙人 个人的看法,可能存在错误,别骂我,说我错了就行
从 题目 得
每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面
排序规则 为:
代码
if(x.c>y.c||x.e>y.e||x.m>y.m) return true;
这里我个人的理解是 x.m>y.m 意思是编号大的排在前面。题目要求的是编号小的排在前面.所以改一下 x.m<y.m
if(x.c>y.c||x.e>y.e||x.m<y.m) return true;
by Sakurakouji_Saika @ 2021-02-23 04:15:28
至于 测试点 9;
从上面的排序顺序说,其实你这里的
if(x.c>y.c||x.e>y.e||x.m<y.m) return true;
还是改这里,看上面 排序规则 改成
if(x.c>y.c||x.m<y.m) return true;
by Ewan @ 2021-03-19 21:11:20
@Sakurakouji_Saika 好的好的,已经通过了,谢谢