?? 格雷碼.cpp
字號:
#include <stdio.h>
int a[1024][10];//定義一個二維數組,用來存放格雷碼,下標1存放格雷碼的個數
//下標2存放格雷碼的長度
void forecode(int x,int y,int n)//函數的功能為使長度為n的所有格雷碼的前半部分
{ int i,j; //存放在相應的二維數組中
for(i=0;i<=y;i++)
for(j=n-2;j>=0;j--)
a[i][j+1]=a[i][j];//雙重循環使n-1的格雷碼都后移一位
for(i=0;i<=y;i++)
a[i][0]=0; //前半部分格雷碼的第0位均為0
}
void backcode(int x,int y,int n)//使所有格雷碼的后半部分存放在相應的數組中
{int i,j,m=1;
for (i=0;i<n;i++)
m=2*m; //m為格雷碼的個數
for(i=0;i<=x-1;i++)
for(j=1;j<=n-1;j++)
a[m-i-1][j]=a[i][j];//后半部分格雷碼從第1位到n-1位和前半部分對應相同
for(i=x;i<m;i++) //對應關系:第i行=第n-i-1行
a[i][0]=1; //后半部分第0位均為1
}
void graycode(int n)
{int i,k,m=1; //格雷碼的生成
if (n==1)
{ a[0][0]=0;
a[1][0]=1;
}
else graycode(n-1);//遞歸調用本函數
for (i=0;i<n;i++)
m=2*m;
k=m/2;
forecode(0,k-1,n);
backcode(k,m-1,n);
}
void main() //主函數
{int i,j,n,m=1;
printf("請輸入n的值:(n<=10)");
scanf("%d",&n); //輸入n的值
for (i=0;i<n;i++)
m=2*m;
graycode(n);
for (i=0;i<m;i++)
{for (j=0;j<n;j++)
printf("%d",a[i][j]);//輸出為n的格雷碼
printf("\n"); //每輸出一個后換行
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -