辛巳蛇宝男,这个老是部分正确

img

img


请帮忙看一下哪里错了,老是部分正确

输入样例1:
为保密,样例中的身份证号前6位统一设为239999。

239999200003132617于龙
输出样例1:
NO
输入样例2:
239999200002210832杨冰
输出样例2:
NO
输入样例3:
239999200201131429张玮娜
输出样例3:
NO
输入样例3:
239999200201210017刘哲
输出样例3:
YES

题目说不能用if和switch。我觉得没必要用long long int去保存数据,如果身份证再长一点怎么办。建议用数组保存,挑出其中需用要的年月日就好了。可以参考我的代码。


//不能用if和switch。我这个应该可以你试试。
#include <stdio.h>

int main()
{
    while (1)
    {
        char arr[32];
        scanf("%s", &arr);
        int year = (int)(arr[6] - '0') * 1000 + (int)(arr[7] - '0') * 100 + (int)(arr[8] - '0') * 10 + (int)(arr[9] - '0');
        int month = (int)(arr[10] - '0') * 10 + (int)(arr[11] - '0');
        int day = (int)(arr[12] - '0') * 10 + (int)(arr[13] - '0');
        ((year == 2001 && (month > 1 || (month == 1 && day > 24))) || (year == 2002 && (month < 2 || (month == 2 && day < 11))))
            ? printf("YES\n")
            : printf("NO\n");
    }
    return 0;
}

出错应该是因为判断最后一位的身份证否是'x'那里出错了,应该吧i='x'改为i=='x', 如果是赋值,则这个if条件会一直满足,则所有身份证号的数据提取都会在这个if进行,而导致结果错误。
修改如下:


#include <stdio.h>

int main(void){
    
    long long a,b,c,d,e,f;
    char i;
    scanf("%lld%c",&a,&i);
//    printf("身份证号是:%lld, 身份证最后一位是:%c\n",a,i);
    
    c = a/100000000%10000;
    d=a/10000%10000;
    b=a/10%2;
    
    //printf("c=%lld,d=%lld,b=%lld\n",c,d,b);
    
    if(i=='x'){
        c=a/10000000%10000;
        d=a/1000%10000;
        b=a%2;
        //printf("if i=='x' , c=%lld,d=%lld,b=%lld\n",c,d,b);
    }
    
    switch(c){
        
        case 2001:
            if (d>=124){
                if(b==0){
                    printf("NO");
                }else if(b!=0){
                    printf("YES");
                }
            }
            break;
        case 2002:
            if(d<=211){
                if(b==0){
                    printf("NO");
                }else if(b!=0){
                    printf("YES");
                }else if(b>211){
                    printf("NO");
                }
            }
            break;
        default:
            printf("NO");
    }
    
    return 0;
    
} 

img

不允许使用if和switch

主要是结尾的X容易忽略

#include<stdio.h>
int main()
{
    long long a,b;
     char abc [10];
    scanf("%lld%s",&a,abc);
    
    
    
    if(abc[0]=='X'){
        b=(a/1000)%100000000;

    if(a%2==0){
        printf("NO");
    }
    else{

        if(b>=20010124&&b<=20020211){
            printf("YES");
        }
        else{
            printf("NO");
        }
        
    }
    }
    else{
    
    b=(a/10000)%100000000;

    if((a/10)%2==0){
        printf("NO");
    }
    else{

        if(b>=20010124&&b<=20020211){
            printf("YES");
        }
        else{
            printf("NO");
        }
        
    }
}
    return 0;
}