Karis @ 2021-04-25 11:21:37
为什么这两个运行结果出来是一样的,但注释的这个有两个点没过呢???
#include<iostream>
#include<algorithm>
using namespace std;
struct stu{
int yw,sx,yy,numb,sum;
};
stu a[301];
int cmp(stu,stu);
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].yw>>a[i].sx>>a[i].yy;
a[i].numb=i;
a[i].sum=a[i].yw+a[i].sx+a[i].yy;
}
sort(a+1,a+n+1,cmp);//sort左开右闭
for(int i=1;i<5;i++){
cout<<a[i].numb<<' '<<a[i].sum<<endl;
}
cout<<a[5].numb<<' '<<a[5].sum;
return 0;
}
int cmp(stu a,stu b){
/*return (a.sum>b.sum)||(a.sum==b.sum&&a.yw>b.yw)||(a.sum==b.sum&&a.numb<b.numb);*/
if(a.sum==b.sum){
if(a.yw==b.yw)
return a.numb<b.numb;
else
return a.yw>b.yw;
}
else
return a.sum>b.sum;
//为什么这两个运行结果出来是一样的,但注释的这个有两个点没过呢???
}
by Karis @ 2021-04-25 11:22:13
求助大佬!!
by WYXkk @ 2021-04-25 11:54:42
@Karis 不一样,sum一样,yw a小,numb a小,注释里的给出true,外面的给出false
by WYXkk @ 2021-04-25 11:56:34
可以改成
return (a.sum>b.sum)||(a.sum==b.sum&&a.yw>b.yw)||(a.sum==b.sum&&a.yw==b.yw&&a.numb<b.numb);
by EnriqueYXH @ 2021-04-25 12:14:54
楼上说得很对
注释里的应改成
return (a.sum>b.sum) || (a.sum==b.sum && a.yw>b.yw) || (a.sum==b.sum && a.yw==b.yw && a.numb<b.numb);