格雷码C++实现

Posted 狼行博客园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了格雷码C++实现相关的知识,希望对你有一定的参考价值。

格雷码C++实现

题目

给定一个整数n,请返回n位的格雷码,顺序从0开始,要求递归实现。

格雷码:

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。

http://baike.baidu.com/link?url=GNm2SqnlhGiX-Y3_TStF_U9cQJYERb39y-c-3INJhpiiU6B8YZ5Pu9bZCHZiGPid8g8OB3Fvf9Z_3vTMZypfFK

参看各类码更细节的介绍

2问题分析

其实最初看到简单的格雷码定义,以及题目要求完全是蒙了。没明白这是什么鬼

直到.....刚刚百度了,认真看了,才明白这是什么鬼~|~

说白了就是打印一个n位的二进制编码,范围从0到2的n次-1.

至于递归实现,小意思(关键还是看懂题意/kb)

然后就没啥说的了,直接实现

void GrayCode(int &x,const int Max,const int N)
{
    int tmp = x;
    if (x > Max)
    {
        return;
    }
    for (int i = N - 1; i >= 0; --i)
    {
        cout << ((x >> i)&1);
    }
    cout << endl;
    GrayCode(++x, Max,N);
}
void TestGray()
{
    int x = 0;
    int max = 31;
    int n = 5;
    GrayCode(x, max, n);
}

备注:

我只是简单实现了功能。

至于人家给的输入输出要求,一笑而过了。

你可以进行函数的封装,最外接口符合题目即可。其他函数都是你的实现了

以上是关于格雷码C++实现的主要内容,如果未能解决你的问题,请参考以下文章

C++ 数学与算法系列之认识格雷码

格雷码那点事——递归非递归实现

格雷码的实现

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

面试题打卡——C++版

递归实现生成Grey码