#include <bits/stdc++.h> using namespace std; int a[20][8];//存储符合条件的牛 int r[8];//存储每头牛的编号的二进制 int k;//符合条件的牛的头数 int b;//每头牛有几只角 int d;//需要几只角不同才友好 //将编号为n的牛的编号转换为2进制 void jinzhi(int n){ int i; //清空r数组 for(i = 0;i < b;i++){ r[i] = 0; } i = 0; while(n != 0){ r[i] = n % 2; n = n / 2; i++; } } //判断编号为n的牛和前面的牛是否友好 bool you(){ bool f = true; //循环a数组的每头牛,判断r数组的这头牛和a数组的每头牛是否友好 int i,j,c; for(i = 0;i < k;i++){ c = 0;//假设r和a[i]有c只不同的角 for(j = 0;j < b;j++){ if(a[i][j] != r[j]){ c++; if(c >= d){ break; } } } //如果a[i]和r不友好 if(c < d){ f = false; break; } } return f; } int main(){ int i = 0,j; int n; cin>>n>>b>>d; k = 1; bool f; cout<<0<<" "; while(k < n){ i++;//判断下一组 jinzhi(i); f = you();//判断r和a数组的牛是否友好 if(f == true){ //将r数组的牛角存储到a数组 for(j = 0;j < b;j++){ a[k][j] = r[j]; } cout<<i<<" "; k++; } } } /************************************************************** Problem: 1532 User: admin Language: C++ Result: Accepted Time:53 ms Memory:2072 kb ****************************************************************/