狼人杀线索判断-蓝桥

题目链接: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 
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;
}


 

你可能感兴趣的:(算法,c++)