昨天参加腾讯的笔试,结果答的一塌糊涂,大题第一题是关于格雷码的递归实现的,当时没写出来,今天查了下资料试着用C++实现一下。
#include <iostream> #include <cmath> #include <string> using namespace std; unsigned int *uIntGaryCode(int N);//二进制格雷码 string *sGaryCode(int N);//字符串型格雷码 int main() { int N; N=5; string *sCode=sGaryCode(N); for(int i=0;i<pow(2,N);i++) cout<<sCode[i]<<endl; system("pause"); return 0; } unsigned int *uIntGaryCode(int N)//二进制型格雷码的递归实现 { unsigned int *code=new unsigned int[(int)pow(2,N)]; if(1==N) { code[0]=0; code[1]=1; } else { int length=(int)pow(2,N-1); unsigned int*uiCode=uIntGaryCode(N-1); for(int i=0;i<length;i++) { code[i]=uiCode[i] ; code[length+i]= uiCode[length-i-1]+pow(2,N-1); } delete []uiCode; } return code; } string *sGaryCode(int N)//字符串型格雷码的递归实现 { string *code=new string[(int)pow(2,N)]; if(1==N) { code[0]='0'; code[1]='1'; } else { int length=(int)pow(2,N-1); string *sCode=sGaryCode(N-1); for(int i=0;i<length;i++) { code[i]="0"+sCode[i]; code[length+i]='1'+sCode[length-i-1]; } delete [] sCode; } return code; }