homi @ 2023-03-05 21:29:38
搜了论坛,自测少量 0 0 0 没问题呢,还请指教 谢了
#include<bits/stdc++.h>
using namespace std;
int n;
struct student
{
string name;
int cha,math,eng,sum;
};
bool cmp(student a,student b)
{
return a.sum>b.sum;
}
int main()
{
student a[1005];
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].name>>a[i].cha>>a[i].math>>a[i].eng;
a[i].sum=a[i].cha+a[i].math+a[i].eng;
}
sort(a+1,a+n+1,cmp);
cout<<a[1].name<<" "<<a[1].cha<<" "<<a[1].math<<" "<<a[1].eng;
return 0;
}
by homi @ 2023-03-05 21:31:39
@homi 坛子里很多说 000情况,第一个点初始值要-1,不懂为啥呢?
by zhczcg314 @ 2023-03-05 21:35:32
应该是在输出序号更靠前的那一部分出问题了。 可以看看这个,不用cmp
#include<bits/stdc++.h>
using namespace std;
int n;
struct student
{
string name;
int num;
int cha,math,eng,sum;
};
bool cmp(student a,student b)
{
return a.sum>b.sum;
}
int main()
{
student a[1005];
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].name>>a[i].cha>>a[i].math>>a[i].eng;
a[i].sum=a[i].cha+a[i].math+a[i].eng;
a[i].num = i;
}
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= n - i; j ++){
if(a[j].sum < a[j + 1].sum){
swap(a[j], a[j + 1]);
}
else if(a[j].sum == a[j + 1].sum){
if(a[j].num > a[j + 1].num){
swap(a[j], a[j + 1]);
}
}
}
}
cout<<a[1].name<<" "<<a[1].cha<<" "<<a[1].math<<" "<<a[1].eng;
return 0;
}
by homi @ 2023-03-06 07:48:28
@zhczcg314 感谢回复,孩子应该对sort不稳定排序理解不深,中午放学按你的思路再思考下,不用sort了。 缘分啊,同一天注册,不过早我们一年。,哈哈 关注了