_JEB_ @ 2020-03-02 10:39:54
#include<bits/stdc++.h>
using namespace std;
struct student{
int name;
int c,m,e;
int total;
}a[501];
int n;
bool comp1(student x,student y){
if(x.total==y.total){
if(x.c>y.c){
return x.c>y.c;
}
if(x.c==y.c){
return x.name<y.name;
}
}
if(x.total!=y.total){
return x.total>y.total;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].c>>a[i].m>>a[i].e;
a[i].total=a[i].c+a[i].m+a[i].e;
a[i].name=i;
}
sort(a+1,a+n+1,comp1);
for(int i=1;i<=5;i++){
cout<<a[i].name<<" "<<a[i].total<<endl;
}
}
by black_trees @ 2020-03-02 10:48:08
你可以试试不用sort 自己手打冒泡
by liqingyang @ 2020-03-02 10:48:29
sort本身没问题啊
by liqingyang @ 2020-03-02 10:48:49
你可以看看sort参数是否有问题
by black_trees @ 2020-03-02 10:50:56
如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。
by black_trees @ 2020-03-02 10:51:28
在sort的参数里加条件判断应该可以
by black_trees @ 2020-03-02 10:53:18
for(int i=1;i<=n;i++){
for(int j=1;j<=n-1;j++){
if(stu[i].sum>stu[j].sum){
swap(stu[i],stu[j]);
}
if(stu[i].sum==stu[j].sum&&stu[i].a>stu[j].a){
swap(stu[i],stu[j]);
}
}
}
我的排序里加了条件特判,在compl函数里加类似特判也许可以
by black_trees @ 2020-03-02 10:55:38
@Charlie___j 你应该是没有加成绩相同时比较语文的特判
by _JEB_ @ 2020-03-02 11:30:17
我加了啊
@我真的很辣鸡
by _JEB_ @ 2020-03-02 13:04:18
#include<bits/stdc++.h>
using namespace std;
struct student{
int name;
int c,m,e;
int total;
}a[501];
int n;
bool comp1(student x,student y){
if(x.total==y.total){
if(x.c>y.c){
return x.c>y.c;
}else if(x.c<y.c)
return x.c>y.c;
else if(x.total==y.total&&x.c==y.c){
return x.name<y.name;
}
}
if(x.total!=y.total){
return x.total>y.total;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].c>>a[i].m>>a[i].e;
a[i].total=a[i].c+a[i].m+a[i].e;
a[i].name=i;
}
sort(a+1,a+n+1,comp1);
for(int i=1;i<=5;i++){
cout<<a[i].name<<" "<<a[i].total<<endl;
}
}
我自己看了一下,if没有起效果,已AC,谢谢!
@我真的很辣鸡
@liqingyang
by liqingyang @ 2020-03-02 13:43:48
@Charlie___j 不客气