消除k的二进制数的最后一个1:
k = k & (k-1);
计算x的二进制数的最后一个1:
lowbit(x) = x & -x;
#include <iostream>
using namespace std;
void print_set(int n, int k)
{
for(int i=0; i<(1<<n); i++){
int num = 0, kk = i; //num统计i中1的个数,kk处理i
while(kk){
kk = kk&(kk-1); //清除kk中的最后一个1
num++; //统计1的个数
}
if(num == k){
for(int j=0; j<n; j++)
if(i & (1<<j))
cout<<j<<" ";
cout<<endl;
}
}
}
int main()
{
int n,m;
cin>>n>>m;
print_set(n,m);
return 0;
}
/*
5 3
0 1 2
0 1 3
0 2 3
1 2 3
0 1 4
0 2 4
1 2 4
0 3 4
1 3 4
2 3 4
*/