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; }