求助,样例运行一样但全wa T—T

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

Kenaiii @ 2023-11-07 21:08:50


#include <stdio.h>
int main()
{

    int n,j;
    int a,b,c,total,champion=0,A,B,C;
    char name[10],GOOD[10];
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(j=0;j<8;j++){
            scanf("%c",&name[j]);
            if(name[j]==' ')
            break;
        }

        scanf("%d %d %d",&a,&b,&c);
        total=a+b+c;
        if(total>champion)
        {
            champion=total;
            A=a;B=b;C=c;
            for(j=0;j<8;j++){
                GOOD[j]=name[j];
            }

        }
    }
    for(j=0;j<8;j++){
        if(GOOD[j]!='\n')
        printf("%c",GOOD[j]);
        }
        printf("%d %d %d",A,B,C);
        return 0;
}

by Missdie @ 2023-11-07 21:18:01

这个题目主要是学会使用struct,可以用struct去写。对于struct,里面定义五个信息,姓名,三科分数,以及输入的次序。然后就可以重载小于符号,或者写个cmp,就这样了。


by ricky_lin @ 2023-11-07 21:28:49

建议使用 %s 读入,%c 的读入会读入很多奇怪的东西,比如换行符等之类的。

%s 的读入可以说更加完备


by Missdie @ 2023-11-07 21:30:11

就像这样

#include<bits/stdc++.h> 
using namespace std;
struct student{
    string name;//名字 
    int C, M, E;//语数外 
    int num;//序号 
    bool operator <(student const &b){
        if (M + C + E == b.M + b.C + b.E)
            return num < b.num;
        return M + C + E > b.M + b.C + b.E;
    }//重载运算符 
}s[1005];
int t;
bool cmp(student a, student b){
    if (a.M + a.C + a.E == b.M + b.C + b.E);
        return a.num < b.num;
    return a.M + a.C + a.E > b.M + b.C + b.E;
}//或者写一个判断函数 
int main(){
    int n;
    cin >> n;
    for(int i = 1; i <= n; i ++){
        cin >> s[i].name >> s[i].C >> s[i].M >> s[i].E; s[i].num = i;
    }
    sort(s + 1, s + n + 1);
//   sort(s + 1, s + n + 1, cmp);
    cout << s[1].name << " " << s[1].C << " " << s[1].M << " " << s[1].E;
    return 0;
}

定义的结构体就可以像原来的变量类型那样声明和使用了


|