吉吉于

Grey Code

格雷码(循环码)是任意两个相邻数的代码只有一位二进制数不同的BCD码,它与奇偶校验码同属可靠性编码。

维基百科
例如:

2位元格雷码</p>
00
01
11
10
3位元格雷码</p>
000
001
011
010
110
111
101
100
4位元格雷码</p>
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
4位元2进制原始码</p>
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

 

运行结果:

代码:

#include <stdio.h>
#include <stdlib.h>

int n;
char s[17];

void dfs(int i)
{
	if(i == n)
	{
		printf("%s\n", s);
	}
	else
	{
		dfs(i + 1);
		if(s[i] == '0')
		{
			s[i] = '1';
		}
		else
		{
			s[i] = '0';
		}
		dfs(i + 1);
	}
}

int main()
{
	int i ;

	while(1)
	{
		scanf("%d", &n);
		if(!n)
		{
			break;
		}
		for(i = 0;i < 17;i++)
		{
			s[i] = '0';
		}
		s[n] = '\0';
		dfs(0);
		printf("\n");
	}

	system("pause");
	return 0;
}

 

转载请注明:于哲的博客 » Grey Code