怀疑测试点错了
查看原帖
怀疑测试点错了
1518020
debug_Master楼主2025/7/30 21:57

#正常来讲第三轮不会出现6:9这个比分,因为早在6:8的时候已经结束了 ##但是有的题解代码(没看全部)认为6:9是da ###这一点使我非常困惑,以下是我的代码,试图解决这一问题

#include <stdio.h>
#include <string.h>
#include <math.h>
char name1[50], name2[50];
char temp[50];//读入的字符串
int record[5];//记录胜负场次
int score[20];
int max(int a, int b){
    if(a > b) return a;
    else return b;
}
int min(int a, int b){
    if(a > b) return b;
    else return a;
}
int main(){
    scanf("%s", name1);
    getchar();
    scanf("%s", name2);

    int flag = 0;//federer
    if(strncmp(name1, "federer", 7) == 0) flag = 1;
    else if(strncmp(name2, "federer", 7) == 0) flag = 2;

    int n;
    scanf("%d", &n);
    getchar();
    for(int i = 0;i < n;i++){
        memset(temp, 0, sizeof(temp));
        gets(temp);
        memset(score, 0, sizeof(score));
        int p = 0;//bool false
        int len = strlen(temp);
        int q = 0;//score 的指针
        for(int j = 0;j < len;j++){
            if(p == 0 && temp[j] >= '0' && temp[j] <= '9'){
                p = 1;//bool true
                score[++q] = temp[j] - '0';
            }
            else if(p == 1 && temp[j] >= '0' && temp[j] <= '9'){
                score[q] = score[q] * 10 + (temp[j] - '0');
            }
            else p = 0;//读到冒号或空格
        }

        if(q > 6){//三轮后比赛未结束
            //发现这里q++不行,必须是++q
            puts("ne");
            continue;
        }
        memset(record, 0, sizeof(record));

        if(score[1] == 6 && score[1] - score[2] >= 2) record[0] = 1;
        else if(score[2] == 6 && score[2] - score[1] >= 2) record[0] = 0;
        else if((score[1] == 7 && score[2] == 6) || (score[1] == 7 && score[2] == 5))record[0] = 1;
        else if((score[1] == 6 && score[2] == 7) || (score[1] == 5 && score[2] == 7))record[0] = 0;
        else{
            puts("ne");
            continue;
        }
        if(score[3] == 6 && score[3] - score[4] >= 2) record[1] = 1;
        else if(score[4] == 6 && score[4] - score[3] >= 2) record[1] = 0;
        else if((score[3] == 7 && score[4] == 6) || (score[3] == 7 && score[4] == 5)) record[1] = 1;
        else if((score[3] == 6 && score[4] == 7) || (score[3] == 5 && score[4] == 7))record[1] = 0;
        else{
            puts("ne");
            continue;
        }
        int w = 0;
        if(record[0] == 1 && record[1] == 1) w = 1;
        else if(record[0] == 0 && record[1] == 0) w = 2;
        if(w != 0 && score[5] != 0){
            puts("ne");
            continue;
        }
        else if((flag != 0 && w == 0) || (flag != w && flag != 0 && w != 0)){
            puts("ne");
            continue;
        }
        else if(w == 1 || w == 2){
            puts("da");
            continue;

        }
        int a = max(score[5], score[6]);
        int b = min(score[5], score[6]);
        if(a > 6 && a - b == 2){
            puts("da");
            continue;
        }
        else if(a == 6 && a - b >= 2){
            puts("da");
            continue;
        }
        else{
            puts("ne");
            continue;
        }
    }
    return 0;
}
2025/7/30 21:57
加载中...