洛谷题库入门2分支结构

img

img


#include<stdio.h>
int main(){
    int x;
    scanf("%d",&x);
    int d = x%2;
    
    if(x>4&&x<=12&&d==0){
        printf("1 ");
    }else{
        printf("0 "); 
    }
        
    if(x>4&&x<=12||d==0){
            printf("1 ");
        }else {
            printf("0 ");
        }
    if(x<=4&&x>12&&d==0){
        printf("1 ");
    }else{
        if(x>4&&x<=12&&d!=0){
            printf("1 ");
        }else{
            printf("0 ");
        }
    }
    
    if(x<=4&&x>12&&d!=0){
        printf("1 ");
    }else{
        printf("0 ");
    }
    
    
    
    return 0;
}

不知道问题出现在哪里?二号测试点有问题

if(x>4&&x<=12||d==0)
这种&&又||的,我建议你该加上括号就加一下。

【以下回答由 GPT 生成】

问题出在第二个if语句中的条件判断上。当前的条件判断是x>4 && x<=12 || d==0,这意味着只要x的值大于4且小于等于12,或者d的值为0,就会执行if后面的代码。然而,我们需要的条件是x的值既大于4又小于等于12,且d的值为0。因此,需要对条件进行调整。

以下是修正后的代码:

#include <stdio.h>
int main(){
    int x;
    scanf("%d", &x);
    int d = x % 2;

    if (x > 4 && x <= 12 && d == 0){
        printf("1 ");
    } else {
        printf("0 ");
    }

    if (x > 4 && x <= 12 && d == 0){
        printf("1 ");
    } else {
        printf("0 ");
    }

    if (x <= 4 && x > 12 && d == 0){
        printf("1 ");
    } else {
        if (x > 4 && x <= 12 && d != 0){
            printf("1 ");
        } else {
            printf("0 ");
        }
    }

    if (x <= 4 && x > 12 && d != 0){
        printf("1 ");
    } else {
        printf("0 ");
    }

    return 0;
}

或者,可以进一步优化代码,使其更简洁:

#include <stdio.h>
int main(){
    int x;
    scanf("%d", &x);
    int d = x % 2;

    if (x > 4 && x <= 12){
        printf("1 ");
    } else {
        printf("0 ");
    }

    if (x > 4 && x <= 12 && d == 0){
        printf("1 ");
    } else {
        printf("0 ");
    }

    if (x >= 12 && d != 0){
        printf("1 ");
    } else {
        printf("0 ");
    }

    if (x <= 4 && d != 0){
        printf("1 ");
    } else {
        printf("0 ");
    }

    return 0;
}

这样,代码更加简洁且易于理解。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

供参考:

#include <stdio.h>
#include <stdbool.h>
int main()
{
    int a;
    scanf("%d", &a);
    bool m, n;
    m = !(a & 1); //如果a是奇数那么a&1的值就是true,如果a是偶数那么a&1的值就是false
    n = (a > 4 && a <= 12);
    printf("%d %d %d %d", m && n, m || n, (m && !n || n && !m), !m && !n);
    return 0;
}

无论怎么写,它说2号测试点出错。不理解