zoukankan      html  css  js  c++  java
  • HNUSTOJ-1009 格雷码

    1009: 格雷码

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 90  解决: 78
    [提交][状态][讨论版]

    题目描述

    对于给定的正整数n,格雷码为满足如下条件的一个编码序列:
    (1) 序列由2^n个编码组成,每个编码都是长度为n的二进制位串。
    (2) 序列中无相同的编码。
    (3) 序列中位置相邻的两个编码恰有一位不同。
    例如:n=2时的格雷码为:{00, 01, 11, 10}。

    输入

    m个测试例的数据,每个测试例的数据由一个正整数n(20>n>0)组成,以0结束。

    输出

    对于每个测试例n,输出2^n个长度为n的格雷码。(在每个格雷码内,两个位之间没有空格如,00输出为:00)。两个测试例的输出数据之间用一个空行隔开,最后一个测试例后两个空行。

    样例输入

    4
    5
    0

    样例输出

    0000
    0001
    0011
    0010
    0110
    0111
    0101
    0100
    1100
    1101
    1111
    1110
    1010
    1011
    1001
    1000
    
    00000
    00001
    00011
    00010
    00110
    00111
    00101
    00100
    01100
    01101
    01111
    01110
    01010
    01011
    01001
    01000
    11000
    11001
    11011
    11010
    11110
    11111
    11101
    11100
    10100
    10101
    10111
    10110
    10010
    10011
    10001
    10000
    

     

    #include<iostream>
    #include<cstring>
    #include<cstdio>
     
    using namespace std;
     
    char *toString(int x){
        static char buff[20];
        sprintf(buff, "%d", x);
        return buff;
    }
    string num2Binary(int num, int bitNum){
        string ret="";
        for(int i = bitNum - 1; i >= 0; i--){
            ret += toString((num >> i) & 1);
        }
        return ret;
    }
    void getGrayCode(int bitNum){
        for(int i = 0; i < (1 << bitNum); i++){
            int grayCode = (i >> 1) ^ i;
            cout << num2Binary(grayCode, bitNum) <<"
    ";
        }
        cout << '
    ';
    }
    int main(){
        int n;
        while(scanf("%d", &n) == 1 && n){
            getGrayCode( n );
        }
    }
  • 相关阅读:
    Android MVP架构分析
    JavaEE基本了解
    学习面试题Day09
    使用反射来实现简单工厂模式
    Android Material Design简单使用
    c语言 找最小值
    c++ 计算指定半径圆的面积
    c++ 字符串拷贝以及合并
    python yaml文件读写
    python 列表元素替换以及删除
  • 原文地址:https://www.cnblogs.com/Pretty9/p/7406800.html
Copyright © 2011-2022 走看看