思路
判断输入的数x值进行或运算之后是否等于 k值
或运算的特性:
根据这个特性 假如 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))