原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1315
思路:分解二进制位,详情看代码
AC代码:
#include<bits/stdc++.h>
using namespace std;
int cnt[34];
int main() {
int n, t, x;
scanf("%d %d", &n, &x);
bool flag = true;
for (int i = 0; i < n; i++) {
scanf("%d", &t);
bool flag = true;
for (int i = 0; i <= 32; i++) {
if (t&(1 << i) && !(x&(1 << i))) { flag = false; break; }
}
if (flag) {
for (int i = 0; i <= 32; i++) {
if (t&(1 << i))cnt[i]++;
}
}
}
int mm = 123123213;
for (int i = 0; i <= 32; i++) {
if (x&(1 << i)) {
mm = min(mm, cnt[i]);
}
}
printf("%d\n", mm);
return 0;
}