shunfurh
编程介的小学生
采纳率100%
2018-11-04 05:19

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 3年前
    点赞 评论 复制链接分享
  • qq_40946921 Italink 3年前
     #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] = '\0';
        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\n", a);          //此行可去除
        }
        printf("result = %s\n", a);
        return 0;
    }
    
    点赞 评论 复制链接分享

为你推荐