格雷碼是以n位的二進位制來表示數。
與普通的二進位制表示不同的是,它要求相鄰兩個數字只能有1個數字不同。
首尾兩個數字也要求只有1位之差。
有很多演算法來生成格雷碼。以下是較常見的一種:
從編碼全0開始生成。
當產生第奇數個數時,只把當前數字最末位改變(0變1,1變0)
當產生第偶數個數時,先找到最右邊的乙個1,把它左邊的數字改變。
用這個規則產生的4位格雷碼序列如下:
0000 0
0001 1
0011 2
0010 3
0110 4
0111 5
0101 6
0100 7
1100 8
1101 9
1111 10
1110
1010
1011
1001
1000
以下是實現**,仔細分析其中邏輯,並填寫劃線部分缺少的**。
#include void show(int a,int n)
printf("\n");
} void f(int n)
else }}
int main()
格雷碼的實現
問題 產生n位元的所有格雷碼。格雷碼 gray code 是乙個數列集合,每個數使用二進位來表示,假設使用n位元來表示每個數字,任兩個數之間只有乙個位元值不同。例如以下為3位元的格雷碼 000 001 011 010 110 111 101 100 如果要產生n位元的格雷碼,那麼格雷碼的個數為2 n...
格雷碼的實現
問題 產生n位元的所有格雷碼。格雷碼 gray code 是乙個數列集合,每個數使用二進位來表示,假設使用n位元來表示每個數字,任兩個數之間只有乙個位元值不同。例如以下為3位元的格雷碼 000 001 011 010 110 111 101 100 如果要產生n位元的格雷碼,那麼格雷碼的個數為2 n...
格雷碼的實現 No 48
問題 產生n位元的所有格雷碼。格雷碼 gray code 是乙個數列集合,每個數使用二進位來表示,假設使用n位元來表示每個數字,任兩個數之間只有乙個位元值不同。例如以下為3位元的格雷碼 000 001 011 010 110 111 101 100 如果要產生n位元的格雷碼,那麼格雷碼的個數為2 n...