zoukankan      html  css  js  c++  java
  • C语言输出格雷码

    格雷码是以n位的二进制来表示数。
    与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同。
    首尾两个数字也要求只有1位之差。

    有很多算法来生成格雷码。以下是较常见的一种:
    从编码全0开始生成。
    当产生第奇数个数时,只把当前数字最末位改变(0变1,1变0)
    当产生第偶数个数时,先找到最右边的一个1,把它左边的数字改变。
    用这个规则产生的4位格雷码序列如下:

    0000
    0001
    0011
    0010
    0110
    0111
    0101
    0100
    1100
    1101
    1111
    1110
    1010
    1011
    1001
    1000
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    void change(char &ch) {
        if (ch == '0')
            ch = '1';
        else
            ch = '0';
    }
    int main() {
        int n;
        scanf("%d", &n);            //输入需要转换的数
        int size = log2(n) + 1;     //计算所需位数
        char *a = new char[size];
        a[size] = '';
        memset(a, '0', size);       //初始化数组
        for (int i = 0; i <= n; i++) {
            if (i % 2) 
                change(a[size - 1]);    //奇数改末尾
            else
                for (int j = size - 1; j > 0; j--) {    //偶数操作
                    if (a[j] == '1') {
                        change(a[j - 1]);
                        break;
                    }
                }
            printf("%s
    ", a);          //此行可去除
        }
        printf("result = %s
    ", a);
        return 0;
    }
  • 相关阅读:
    Map的两张遍历方法 keySet(),entrySet()
    http://localhost:8080请求用户名和密码。信息为:“XDB” 解决办法
    redis 集群出现的错误
    通信 缩略词
    redis
    hadoop 概念
    mysql 集群的一些概念
    SQL 基本关键字 函数 关联 连接
    JAVA集合
    SQL.Cookbook 读书笔记5 元数据查询
  • 原文地址:https://www.cnblogs.com/F-itachi/p/9974336.html
Copyright © 2011-2022 走看看