#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
#define M 10
int a[MAX][M];
void ForeCode(int forenum, int n)
{
int i, j;
for(i = 0; i <= forenum; i++)
for(j = n - 2; j >= 0; j--)
a[i][j + 1] = a[i][j];
for(i = 0; i <= forenum; i++)
a[i][0] = 0;
}
void BackCode(int backbegin, int backend, int n)
{
int i, j;
for(i = 0; i < backbegin; i++)
for(j = 1; j < n; j++)
a[backend - i - 1][j] = a[i][j];
for(i = backbegin; i < backend; i++)
a[i][0] = 1;
}
void GrayCode(int nBits)
{
int i, k, m = 1;
if(nBits == 1)
{
a[0][0] = 0;
a[1][0] = 1;
}
else
GrayCode(nBits - 1);
for(i = 0; i < nBits; i++)
m = 2 * m;
k = m / 2;
ForeCode(k - 1, nBits);
BackCode(k, m, nBits);
}
void PrintGrayCode(int nBits)
{
int i, j, m = 1;
for(i = 0; i < nBits; i++)
m = 2 * m;
for(i = 0; i < m; i++)
{
for(j = 0; j < nBits; j++)
printf("%d", a[i][j]);
printf(" ");
}
}
int main()
{
int nBit;
printf("请输入n值为:",nBit);
scanf("%d",&nBit);
GrayCode(nBit);
PrintGrayCode(nBit);
return 0;
}
运行结果截图