二进制枚举,由于需要按字典序输出,所以是使用 0 的位置,做一个镜像
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < (1 << n); ++i) {
int t = __builtin_popcount(i);
if (t != n - m) continue;
for (int j = n - 1; j >= 0; --j)
if ((i >> j & 1) == 0)
cout << n - j << ' ';
cout << endl;
}
return 0;
}