只过了第一个测试点,但是自己测试是全对的怎么回事?

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

Tudoudidan @ 2022-10-22 20:08:18

#include<bits/stdc++.h>
using namespace std;

int main(){
    char name[8],bestname[8];
    short num,bs=0,list[2],blist[2];
    cin>>num;
    for(int i=0;i<=num;i++){
        cin>>name;
        cin>>list[0]>>list[1]>>list[2];
        if((list[0]+list[1]+list[2])>=bs){
            blist[0]=list[0];
            blist[1]=list[1];
            blist[2]=list[2];
            for(int j=0;j<=8;j++){
                bestname[j]=name[j];
            }
            bs=list[0]+list[1]+list[2];
        }
    }
    cout<<bestname<<' '<<blist[0]<<' '<<blist[1]<<' '<<blist[2];
}

by WZWZWZWY @ 2022-10-22 20:16:43

首先,list数组您只开到了list[0],list[1]。
想要有list[2]就要定义为list[3].

还有,题目说若有多个相同成绩的,输出最靠前的那一个。所以判断总分的条件需要改一下呢

@Tudoudidan


by cuienning @ 2022-10-22 20:30:57

第一个问题:相同成绩优先级,再看看题:相同成绩先输入的在前,所以把<=改成<

#include<bits/stdc++.h>
using namespace std;

int main(){
    char name[8],bestname[8];
    short num,bs=0,list[2],blist[2];
    cin>>num;
    for(int i=0;i<=num;i++){
        cin>>name;
        cin>>list[0]>>list[1]>>list[2];
        if((list[0]+list[1]+list[2])>bs){
            blist[0]=list[0];
            blist[1]=list[1];
            blist[2]=list[2];
            for(int j=0;j<=8;j++){
                bestname[j]=name[j];
            }
            bs=list[0]+list[1]+list[2];
        }
    }
    cout<<bestname<<' '<<blist[0]<<' '<<blist[1]<<' '<<blist[2];
}

这时又有一个问题:如果成绩都为0,就会随机bestname,进而出错 应该为:

#include<bits/stdc++.h>
using namespace std;

int main(){
    char name[8],bestname[8];
    short num,bs=-1,list[2],blist[2];
    cin>>num;
    for(int i=0;i<=num;i++){
        cin>>name;
        cin>>list[0]>>list[1]>>list[2];
        if((list[0]+list[1]+list[2])>bs){
            blist[0]=list[0];
            blist[1]=list[1];
            blist[2]=list[2];
            for(int j=0;j<=8;j++){
                bestname[j]=name[j];
            }
            bs=list[0]+list[1]+list[2];
        }
    }
    cout<<bestname<<' '<<blist[0]<<' '<<blist[1]<<' '<<blist[2];
}

然后又错了,只过了1个点,我也很无语


by cuienning @ 2022-10-22 20:33:01

然后就是数组越界: 应该为:

#include<bits/stdc++.h>
using namespace std;

int main(){
    char name[8],bestname[8];
    short num,bs=-1,list[10],blist[10];
    cin>>num;
    for(int i=0;i<=num;i++){
        cin>>name;
        cin>>list[0]>>list[1]>>list[2];
        if((list[0]+list[1]+list[2])>bs){
            blist[0]=list[0];
            blist[1]=list[1];
            blist[2]=list[2];
            for(int j=0;j<=8;j++){
                bestname[j]=name[j];
            }
            bs=list[0]+list[1]+list[2];
        }
    }
    cout<<bestname<<' '<<blist[0]<<' '<<blist[1]<<' '<<blist[2];
}

然后就发现就WA了一个


by cuienning @ 2022-10-22 20:35:48

#include<bits/stdc++.h>
using namespace std;

int main(){
    char name[9],bestname[9];
    short num,bs=-1,list[10],blist[10];
    cin>>num;
    for(int i=0;i<=num;i++){
        cin>>name;
        cin>>list[0]>>list[1]>>list[2];
        if((list[0]+list[1]+list[2])>bs){
            blist[0]=list[0];
            blist[1]=list[1];
            blist[2]=list[2];
            for(int j=0;j<=8;j++){
                bestname[j]=name[j];
            }
            bs=list[0]+list[1]+list[2];
        }
    }
    cout<<bestname<<' '<<blist[0]<<' '<<blist[1]<<' '<<blist[2];
}

这样做竟然AC了,应该是名字数组越界


by cuienning @ 2022-10-22 20:36:42

我也是个小白,大佬勿喷(QWQ)


by cuienning @ 2022-10-22 20:37:23

@WZRYWZWY 很好


by Tudoudidan @ 2022-10-23 10:48:28

@cuienning 谢谢大佬(〃'▽'〃)(〃'▽'〃)


|