1293 格雷码

来源:互联网 发布:新时代软件下载 编辑:程序博客网 时间:2024/06/09 16:09
 

描述

格雷码(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);}} 


 

原创粉丝点击