【day11】【洛谷算法题】-P5710数的性质-刷题反思集[入门2分支结构]

在这里插入图片描述

大家好,我是花无缺,一枚热爱生活的新时代青年,感谢你的阅读~
‍个人主页:@花无缺
欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 花无缺 原创

收录于专栏 【算法题集】


文章目录

  • 【深基3.例2】数的性质
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例
      • 样例输入
      • 样例输出
    • 我的题解
      • 第一次提交
        • 结果
      • 第二次提交
        • 结果
    • 优解1
    • 优解2
    • 反思总结


【深基3.例2】数的性质

题目描述

一些整数可能拥有以下的性质:

● 性质 1:是偶数;
● 性质 2:大于 4 4 4 且不大于 12 12 12

小 A 喜欢这两个性质同时成立的整数;Uim 喜欢这至少符合其中一种性质的整数;八尾勇喜欢刚好有符合其中一个性质的整数;正妹喜欢不符合这两个性质的整数。现在给出一个整数 x x x,请问他们是否喜欢这个整数?

输入格式

输入一个整数 x ( 0 ≤ x ≤ 1000 ) x(0\le x \le 1000) x(0x1000)

输出格式

输出这 4 4 4 个人是否喜欢这个数字,如果喜欢则输出 1,否则输出 0,用空格分隔。输出顺序为:小 A、Uim、八尾勇、正妹。

样例

样例输入

12

样例输出

1 1 0 0

我的题解

第一次提交

#include 


int main()
{

    int x;
    scanf("%d", &x);
    //小A
    if (x > 4 && x < 12 && x % 2 == 0)
    {
        printf("1 ");
    }
    else
        printf("0 ");

    //Uim
    if ((x > 4 && x < 12) || (x % 2 == 0))
    {
        printf("1 ");
    }
    else
        printf("0 ");

    //八尾勇
    if ((x > 4 && x < 12 && x % 2 != 0) || (x % 2 == 0 && ((x < 4 || x == 4) && (x == 12 || x > 12))))
    {
        printf("1 ");
    }
    else
        printf("0 ");

    //正妹
    if ((x % 2 != 0) && (x < 4 || x == 4 || x == 12 || x > 12))
    {
        printf("1");
    }
    else
        printf("0");


    return 0;
}

结果

错了,自己测试也没有什么问题,想不明白,然后我就看了下题解,发现原来是条件判断出错了,题目的整数的性质是不大于12,也即小于等于12,但我理解成了小于12,就忽略了等于12这一边界条件,导致错了。

第二次提交

#include 

int main()
{
    int x;
    scanf("%d", &x);
    // 小A
    if (x > 4 && x <= 12 && x % 2 == 0)
    {
        printf("1 ");
    }
    else
        printf("0 ");

    // Uim
    if ((x > 4 && x < 12) || (x % 2 == 0))
    {
        printf("1 ");
    }
    else
        printf("0 ");

    // 八尾勇
    if ((x > 4 && x <= 12 && x % 2 != 0) || (x % 2 == 0 && ((x < 4 || x == 4) && (x > 12))))
    {
        printf("1 ");
    }
    else
        printf("0 ");

    // 正妹
    if ((x % 2 != 0) && (x <= 4 || x > 12))
    {
        printf("1");
    }
    else
        printf("0");

    return 0;
}

结果

过了
Accepted

优解1

这个题有一个可以改进的地方,就是条件判断的语句可以赋给一个bool型变量,这样就可以不用自己一个个的判断条件语句的真假,直接借助输出或者debug就可以快速知道条件判断正确与否,改进代码如下:
注意:在C语言中使用bool型变量,需要加上头文件"stdbool.h"

#include 
#include 


int main()
{

    int x;
    scanf("%d", &x);
    bool a = x % 2 == 0;
    bool b = x > 4 && x <= 12;
    // 小A
    if (a && b)
    {
        printf("1 ");
    }
    else
        printf("0 ");

    // Uim
    if (a || b)
    {
        printf("1 ");
    }
    else
        printf("0 ");

    // 八尾勇
    if ((a && !b) || (!a && b))
    {
        printf("1 ");
    }
    else
        printf("0 ");

    // 正妹
    if (!a && !b)
    {
        printf("1");
    }
    else
        printf("0");


    return 0;
}

优解2

//C++
#include
using namespace std;
int main()
{
    int n;
    bool a=0,b=0,c=0,d=0;
    cin>>n;
    if(n%2==0&&(n>4&&n<=12))a=1;  //必须要符合两个条件
    if(n%2==0||(n>4&&n<=12))b=1;  //至少要符合一个条件
    if(n%2==0^(n>4&&n<=12))c=1;   //必须要只符合一个条件
    if(n%2!=0&&(n<=4||n>12))d=1;  //必须要两个条件全都不符合
    cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;  //输出
    return 0;
}

反思总结

还是不够细致,第一次提交边界条件没弄清楚,两下写了就提交了,结果就是一个大警告。
此类有条件判断的if语句如果条件比较复杂的时候,就将条件赋给一个变量,然后直接使用变量在if语句中判断,这样就可以方便的判断条件的真假。


欢迎关注我的博客:来和我一起成长吧! 现在关注我,以后就是老粉了(手动狗头)
一起进步-刷题专栏:【算法题集】
往期精彩好文:
【day8】【洛谷算法题】-P3954成绩-刷题反思集[入门1顺序结构][附一周思考总结]
HTML基础知识详解
你们的点赞 收藏⭐ 留言 关注✅
是我持续创作,输出优质内容的最大动力!
谢谢!

【day11】【洛谷算法题】-P5710数的性质-刷题反思集[入门2分支结构]_第1张图片

你可能感兴趣的:(算法题集,c语言,c++,算法,数据结构)