top
友情提示
测试消息
确定
友情提示

处理中,请稍后...

格雷码递归生成的简单实现
一个c++递归生成格雷码的简单算法。
#include <iostream>
#include <string>
#include <vector>
using namespace std;

/***************************/
/*
0  1
00 01   11 10
000 001 011 010   110 111 101 100
0000 0001 0011 0010 0110 0111 0101 0100   1100 1101 1111 1110 1010 1011 1001 1000
*/

void getGrayCode(vector<string> &v, int cnt) {
    if (cnt == 1) {
        v.push_back("0");
        v.push_back("1");
        return;
    }
    getGrayCode(v, cnt - 1);
    vector<string> vecTmp = v;
    reverse(vecTmp.begin(), vecTmp.end());
    for (size_t i = 0; i < vecTmp.size(); i++) {
        v[i] = "0" + v[i];                        //前半部分由上个数量级的格雷码在前面加 “0”      
        vecTmp[i] = "1" + vecTmp[i];              //后半部分由上个数量级的格雷码倒序后在前加 “1”       
        v.push_back(vecTmp[i]);
    }
}

int main() {
    vector<string> grayCode;
    int cnt = 0;
    while (true) {
        cin >> cnt;
        if (cnt <= 0) {
            cout << "所输入数字不符合要求(>0), 请重试!" << endl;
        }
        else {
            break;
        }
    }
    getGrayCode(grayCode, cnt);

    for (size_t i = 0; i < grayCode.size(); i++) {
        cout << grayCode[i] << " ";
        if(i+1 % 8 == 0){
            cout << endl;
        }
    }
    cout << "\n\n";
    system("PAUSE");
    return 0;
}

 
文章阅读完了, 快到评论区留下你的看法吧!
Email:
验证码:
昵 称 :
评论列表
热门标签
今日倒计时
小时 分钟
年少不识曲中意,再听已是曲中人
加油吧骚年
文章分类
最新文章
浏览排行
分享

关于友情链接

友情链接申请请到留言板块留言。注明网站名称及网址。期待您的友链,欢迎留言。
最新留言
[2018/04/07]太难找了,找到了
[2018/03/20]Entry fileTemplates//Singleton.java.ft not found in C:/Dev/android-studio/lib/resources_en.jar 该错误对我们使用AS没有影响吗?为什么复制保存后重新创建一个新的之后这个错误又出现了?
[2018/01/23]815cce30b85eb6b7ee7930c09135fcf7好漂亮的博客空间啊
[2018/01/06]好漂亮的博客.......
[2017/12/26]试试水
[2017/12/20] 博主可以分享一下这个源码不, 很喜欢这个博客
[2017/11/19]你加我友链了????
[2017/11/19]你的alert 很不友好哈
[2017/11/19]友链已添加
[2017/11/19]路过帮踩。
Copyright © 2018 DevSONG . All rights reserved. 有疑问或者建议? 留言给我或者E-mail me
滇ICP备17002307号-3