首先0在num[]中,然后枚举和已经加入num[]的数比较,如果符合,就加进集合中。
/*
ID:Ryan
PROG:hamming
LANG:C++
*/
#include
< iostream >
#include
< fstream >
using   namespace  std;
int  num[ 65 ];
int  n,b,d;
int  cnt = 1 ;
void  check( int  t)
{   
int  i,j;
    
int  k;
    
bool  can = 1 ;
    
for (i = 1 ;i <= cnt;i ++ ) // 对每一个加进集合的数进行比较 
    {   k = 0 ;
        
for (j = 0 ;j < b;j ++ ) // 如果距离<d,排除 
        { 
            
if (t & ( 1 << j) ^ (num[i] & ( 1 << j)))
                k
++
        }
        
if (k < d)
        {   can
= 0 ;
            
break ;
        } 
    }
    
if (can == 1 ) // 如果符合情况,加进去 
        num[ ++ cnt] = t;
    
return  ;
}
int  main()
{   ifstream fin(
" hamming.in " );
    ofstream fout(
" hamming.out " );
    
int  q,j;
    fin
>> n >> b >> d;
    num[cnt]
= 0 ;
    
for (q = 1 ;q < ( 1 << b);q ++ )
    {
        check(q);
        
if (cnt == n)
            
break ;
    }
    
for (j = 1 ;j < cnt;j ++ )
    {   
if (j % 10 == 0 )
            fout
<< num[j] << endl;
        
else   fout << num[j] << "   " ;
    }
    fout
<< num[j] << endl;
    
// system("pause");
     return   0 ;
}