80分求助

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

zhanghanwen1112 @ 2022-04-08 14:49:30

#include<bits/stdc++.h>
using namespace std;
struct student
{
    string name;
    int c,m,e,chenji;
}
a[1000];
int main()
{
    int n,p;
    cin>>n;
    for(int i=0;i<=n;i++)
    {
        cin>>a[i].name;
        cin>>a[i].c>>a[i].m>>a[i].e;
        a[i].chenji=a[i].c+a[i].m+a[i].e; 
    }
    for(int i=0;i<=n-1;i++)
    {
     for(int j=i+1;j<=n-1;j++)
     {
        if(a[j].chenji>a[i].chenji)
        {
            swap(a[j],a[i]);
         }
         if(a[j].chenji==a[i].chenji)
         {
            if(a[j].name<a[i].name)
            {
                swap(a[j],a[i]);
             }
         }
     }
    }
        cout<<a[0].name<<" "<<a[0].c<<" "<<a[0].m<<" "<<a[0].e;
    return 0;
}

by ajahjahah @ 2022-04-08 14:52:17

如果有多个总分相同的学生,输出靠前的那位。

应该删掉这段

if(a[j].chenji==a[i].chenji)
         {
            if(a[j].name<a[i].name)
            {
                swap(a[j],a[i]);
             }
         }

by ajahjahah @ 2022-04-08 14:53:23

去掉就AC了

不过建议可以用sort(自定义函数或者是重载运算符)


by tangyi091025 @ 2022-04-08 14:57:07

中间改下

#include<bits/stdc++.h>
using namespace std;
struct student
{
    string name;
    int c,m,e,chenji;
}
a[1000];
int main()
{
    int i,l,n,p;
    cin>>n;
    for(int i=0;i<=n;i++)
    {
        cin>>a[i].name;
        cin>>a[i].c>>a[i].m>>a[i].e;
        a[i].chenji=a[i].c+a[i].m+a[i].e; 
    }
    for(l=0;l<n;l++)
    {
        for(i=0;i<n;i++)
        {
            if(a[i].chenji<a[i+1].chenji)
            {
                           swap(a[i].name,a[i+1].name);
                swap(a[i].chenji,a[i+1].chenji);
                swap(a[i].c,a[i+1].c);
                swap(a[i].m,a[i+1].m);
                swap(a[i].e,a[i+1].e);
            }
        }
    }
        cout<<a[0].name<<" "<<a[0].c<<" "<<a[0].m<<" "<<a[0].e;
    return 0;
}

by tangyi091025 @ 2022-04-08 14:57:53

< 就行了


by zhanghanwen1112 @ 2022-04-08 14:57:57

@lao_ba 去掉哪儿?


by ajahjahah @ 2022-04-08 14:59:24

@zhanghanwen1112

这一段是多余的


if(a[j].chenji==a[i].chenji)
         {
            if(a[j].name<a[i].name)
            {
                swap(a[j],a[i]);
             }
         }

因为题目没有要求总成绩相等时按照名字字典序排序


by tangyi091025 @ 2022-04-08 15:00:08

如果有多个总分相同的学生,输出靠前的那位。


|