蓝桥杯 相或为k

46 阅读1分钟

www.lanqiao.cn/problems/34…

image.png

image.png

思路

判断输入的数x值进行或运算之后是否等于 k

或运算的特性:

image.png

根据这个特性 假如 k位为0 x位为1。 1&0=1 ,x经过位运算后不等于k return false

总结

当k位上为0,x位为1时,相或 返回false

否则返回true 比如 k=1 x=1 1&1=1 x经过或运算之后等于K值 又比如 k=1 x=0 1&0=1 ,x=k值

code

#include <iostream>

using namespace std;



bool check(int x,int k)
{
  for(int i=31;i>=0;i--)
  {
    if(!((k>>i)&1)&&((x>>i)&1))  
    return false;

  }
  return true;
}
int main()
{
  int t=0;
  cin>>t;//t个数

  while(t--)
  {
    int n=0,k=0;
    cin>>n;//输入数据
    cin>>k;//判断选出来的数是否符合

   int ans=0;//存结果
    for(int i=0;i<n;i++)
    {
      int x=0;
      cin>>x;  //输入数据
  
      if(check(x,k))
      {
        ans|=x;
      }

    }

    if(ans==k) puts("Yes");
    else puts("No");
  }

  return 0;
}
if(!((k>>i)&1)&&((x>>i)&1))