90分 第一个点过不去 ,小六求助 感谢

P5740 【深基7.例9】最厉害的学生

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了。 缘分啊,同一天注册,不过早我们一年。,哈哈 关注了


|