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)。两个测试例的输出数据之间用一个空行隔开,最后一个测试例后两个空行。
样例输入
450
样例输出
00000001001100100110011101010100110011011111111010101011100110000000000001000110001000110001110010100100011000110101111011100101001011010010100011000110011101111010111101111111101111001010010101101111011010010100111000110000
#include#include #include 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) <<"\n"; } cout << '\n';}int main(){ int n; while(scanf("%d", &n) == 1 && n){ getGrayCode( n ); }}