#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll ,ll > P;
#define INF 0xf3f3f3f
const int Max=int(1000+10);
int n,b,d,a[300];
bool judge(int x,int y) {
int t=x^y;
int ans=0;
while(t>0)
{
if(t%2)
ans++;
t>>=1;
}
if(ans>=d)
return 1;
return 0;
}
int main() {
while(~scanf("%d%d%d",&n,&b,&d)) {
int num=0;
bool flag=0;
for(int i=0; i<=(pow(2,b)-1); i++) {
flag=0;
for(int j=1; j<=num; j++)
if(!judge(i,a[j]))
{
flag=1;break;
}
if(!flag)
{
a[++num]=i;
if(num==n)
break;
}
}
for(int i=1;i<=num;i++)
{
if(i%10==0||i==num)
{
printf("%d\n",a[i]);
continue;
}
printf("%d ",a[i]);
}
}
return 0;
}
https://www.luogu.org/problemnew/show/P1461
函数__builtin_popcount()它可以统计这个数转化为二进制数中一的个数,所以我们可以调用这个的函数
bool judge(int x,int y) {
int ans=__builtin_popcount(x^y);
if(ans>=d)
return 1;
return 0;
}