Hamming Codes chapter 2.1

  感觉USCAO的题目真是有点难懂,题目比较简单,直接从最小开始枚举就过了

/*

ID: hubiao cave

PROG: hamming

LANG: C++

*/




#include<iostream>

#include<fstream>

#include<string>
#include<cmath>

using namespace std;

int N,B,D;

int ary[66];
int count1=0;

bool canfit(int);
int main()

{

    ifstream fin("hamming.in");

    ofstream fout("hamming.out");
    
    fin>>N>>B>>D;
    ary[1]=0;
    count1++;
    for(int i=1;i<=pow(2,B)-1&&count1<N;i++)
    {
        if(canfit(i))
            ary[++count1]=i;
    }

    int i=1;
    while(i<N)
    {
        if(i%10!=0)
        {
            fout<<ary[i]<<" ";
        }
        else
        {
            fout<<ary[i]<<endl;
        }
        i++;
    }
    if((i+1)%10==0)
        fout<<ary[i]<<endl;
    else
    {
        fout<<ary[i]<<endl;
    }

    

    return 0;


}

bool canfit(int n)
{
    for(int i=1;i<=count1;i++)
    {
        if(n==ary[i])
            return false;
        int x=n^ary[i];
        int cou=0;
        int m=0;
        while(cou<D&&m<B)
        {
            if(x>>m&1)
                cou++;
            m++;
        }
        if(cou<D)
            return false;
    }
    return true;
}
原文地址:https://www.cnblogs.com/cavehubiao/p/3280749.html