3 条题解

  • 1
    @ 2023-6-11 18:05:58

    image

    #include<cstdio>
    using namespace std;
    int n,b,d,h,H[65];
    bool yes;
    bool ch(int x,int y)
    {
    	int di=0;//初始化
    	for (int i=1;i<=8;i++)//枚举每一位
    	 if (((x^y)>>(i-1))&1)//是否不同
    	  di++;//统计
    	if (di>=d) return 1;//不同的单位大于等于d
    	return 0;//小于d
    }
    int main()
    {
    	scanf("%d%d%d",&n,&b,&d);//读入
    	h=-1;//初始化
    	for (int i=1;i<=n;i++)
    	{
    		yes=1;//初始化
    		while (yes)
    		{
    			yes=0; h++;//尝试下一个数
    			for (int j=1;j<=i-1;j++)//枚举前面的每一个编码
    			 if (!ch(H[j],h))//符不符合
    			 {
    				yes=1;//标记
    				break;//直接开始尝试下一个数(这一个数不是)
    			 }
    		}
    		printf("%d ",h);//输出
    		H[i]=h;//记录
    		if (!(i%10))
    		 printf("\n");//处理换行
    	}
    	return 0;
    }
    

    信息

    ID
    569
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    138
    已通过
    58
    上传者