E.二进制子集 WA 9

题目描述:
给一个数
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;
}
1 个赞

用dfs