1293 格雷码

 

描述

格雷码(Gray code),又叫循环二进制码或反射二进制码。

  • 格雷码有2^n个不同的元素。
  • 每个元素含有n个0或1,即有n个位。
  • 每对相邻的元素都只有一位不同。

例如,当n=2时,曾序格雷码是00,01,11,10.

现在,给你一个正整数n,生成它的格雷码序列,它应由例子扩展而来,并且以全0数开始。(具体见样例)

输入

对于每组数据,仅有一行,包含一个整数n(0< n < 20)。输入以0结尾。

输出

对于每组数据,输出对应的格雷码序列,

样例输入

1
2
3
0

样例输出

0
1
00
01
11
10
000
001
011
010
110
111
101
100

解题思路:
此题是求N位所有0和1的组合。其实是按照位变动来进行输出的,可以创建两个函数,一个用来负责转换,一个负责输出。这样题目的思路比较清楚。

 

#include <stdio.h>
#include <string.h>
void putsgray(int a[],int m)
{
	int i;
	for(i=m;i>0;i--)  
		printf("%d",a[i]);
		printf("\n");
}

void gray(int n,int a[],int m)
{
	if(n==1)
	{
		a[n]=1-a[n];
		putsgray(a,m);
	}
	else
	{
		gray(n-1,a,m);
		a[n]=1-a[n];
		putsgray(a,m);
		gray(n-1,a,m);
	}
}

main()
{
	int a[21]={0};
	int n;
	scanf("%d",&n);
	while(n!=0)
	{
    memset(a,0,sizeof(a));
	
	putsgray(a,n);
	gray(n,a,n);
	
	scanf("%d",&n);
	}
} 


 

你可能感兴趣的:(1293 格雷码)