大家好,我是花无缺,一枚热爱生活的新时代青年,感谢你的阅读~
个人主页:@花无缺
欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 花无缺 原创收录于专栏 【算法题集】
一些整数可能拥有以下的性质:
● 性质 1:是偶数;
● 性质 2:大于 4 4 4 且不大于 12 12 12。
小 A 喜欢这两个性质同时成立的整数;Uim 喜欢这至少符合其中一种性质的整数;八尾勇喜欢刚好有符合其中一个性质的整数;正妹喜欢不符合这两个性质的整数。现在给出一个整数 x x x,请问他们是否喜欢这个整数?
输入一个整数 x ( 0 ≤ x ≤ 1000 ) x(0\le x \le 1000) x(0≤x≤1000)
输出这 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
这个题有一个可以改进的地方,就是条件判断的语句可以赋给一个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;
}
//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基础知识详解
你们的点赞 收藏⭐ 留言 关注✅
是我持续创作,输出优质内容
的最大动力!
谢谢!