题目描述:
给一个数
n,求所有的
x 满足在二进制下
x 的第
k 位如果是
1
1 ,则
n 的第 k 位必须为
1。求出的
x 按照升序输出。
比如
n=13,二进制为
1101
1101,则总共有8个满足条件的
x ,他们的二进制为:
0,1000,1100,1001,1101,100,101,1对应的数为:
0,8,12,9,13,4,5,1
输入格式:
第一行包含一个整数
n,保证 n 在二进制下为
1的位数小于
15。
输出格式:
升序输出所有 x。
代码见下:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> ans;
for (int i = 0; i < (1 << n); i++) {
bool flag = true;
for (int j = 0; j < n; j++) {
if ((i & (1 << j)) && !(n & (1 << j))) {
flag = false;
break;
}
}
if (flag) ans.push_back(i);
}
for (int x : ans) cout << x << " ";
return 0;
}