P5710
# P5710 【深基3.例2】数的性质
题目描述
一些数字可能拥有以下的性质:
- 性质 1:是偶数;
- 性质 2:大于 4 且不大于 12。
小A 喜欢这两个性质同时成立的数字;Uim 喜欢这至少符合其中一种性质的数字;八尾勇喜欢刚好有符合其中一个性质的数字;正妹喜欢不符合这两个性质的数字。
输入格式
输入一个数字
输出格式
输出这 4 个人是否喜欢这个数字,如果喜欢则输出1
,否则输出0
,用空格分隔。
输入输出样例
输入 #1复制
12
1
1
输出 #1复制
1 1 0 0
1
1
解题思路:
这个题明显是可以用一大堆if来判断的, 但其实可以运用"且或非"配合"位运算符",可以非常简单的实现功能
代码:
#include<bits/stdcpp.h>
#include <iostream>
using namespace std;
int n;
bool a, b; //定义布尔变量
int main(){
cin >> n;
a = (n % 2 == 0 && n != 1); //设置a偶数得判定条件,最好是满足条件
b = (n > 4 && n <= 12); //设置b条件得满足情况
cout << (a & b) << " " << (a | b) << " " << (a ^ b) << " " << (!a && !b);
//这里运用位运算符,记得要打括号不然容易报错,a&b就是 a和b都满足输出1,不满足输出2
//附上运算法则
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
位运算符
符号 | 描述 | 运算规则 |
---|---|---|
& | 按位与 | 两个位都为1时,结果才为1 |
| | 按位或 | 两个位都为0时,结果才为0 |
^ | 按位异或 | 两个位相同为0,相异为1 |
~ | 按位取反 | 0变1,1变0 |
<< | 按位左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
>> | 按位右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数, 各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
在线编辑 (opens new window)
最近编辑时间: 2024/01/25 20:50:42