题目链接:4.狼人杀线索判断 - 蓝桥云课 (lanqiao.cn)
解题思路:首先需要知道什么是按位与运算
按位与运算符(&)
参加运算的两个数,按二进制位进行“与”运算。
运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)
即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。
例:3 &5 即 00000011 & 00000101 = 00000001 ,所以 3 & 5的值为1。
知道后本题就很简单了,在寻找满足条件的两个数时,不要直接两个for循环,会超时,只需要设置一个循环,最大值是s,也就是两数之和,当遍历到某个数时,另一个数就是s-i,所以只需要判断两数的按位与是否等于a即可。
下面是c++代码:
#include <iostream>
using namespace std;
int main()
{
// 请在此输入您的代码
int n, a, s, result = 0;
cin >> n;
while (n != 0) {
cin >> a >> s;
result = 0;
for (int i = 0; i < s; i++) {
int num = i & (s - i);
if (num == a) {
result = 1;
break;
}
}
if (result == 1) {
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
n--;
}
return 0;
}