算法1
从1 -> 1 >> n - 1遍历
如果__builtin_popcount(x) == k,那么符合条件,注意到字典序列,且x是从1遍历到 1 >> n - 1,那么倒着来就行了
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int n,k;
int main(){
cin >> n >> k;
if(k == 0)return 0;
for(int i = (1 << n )- 1;i >= 0;i--){
if(__builtin_popcount(i) == k){
int x = i;
//倒着遍历
//输出也是倒着的
for(int k = n - 1;k >= 0;k--){
if(i >> k & 1){
cout << n - k << " ";
}
}
cout << endl;
}
}
return 0;
}
雨竹nb!