zoukankan      html  css  js  c++  java
  • 格雷码C++递归实现

    昨天参加腾讯的笔试,结果答的一塌糊涂,大题第一题是关于格雷码的递归实现的,当时没写出来,今天查了下资料试着用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;
    }
  • 相关阅读:
    memcached+狀態模式+工廠方法使用
    狀態模式
    UML类图
    Quartz.NET
    第四次作业---计算器的第二步
    做 fzu oj 1106 题目学到的
    做fzu oj 1045 做减法学到的sprintf()函数
    第三次补作业
    第三次作业随笔(new)包含了补作业
    远征系列---离港篇(学杂记)
  • 原文地址:https://www.cnblogs.com/fastcam/p/4788287.html
Copyright © 2011-2022 走看看