在一組數的編碼中,若任意兩個相鄰的**只有一位二進位制數不同,則稱這種編碼為
格雷碼
例如當n為1的時候,格雷碼為0,1;
n為2的時候,格雷碼為00,01,11,10;n為3的時候,格雷碼為000,001,011,010,110,111,101,100;
單純從上面看,這樣我們需要輸入n的時候輸出相應的格雷碼應該怎麼辦?
我們看上面的變換過程,假如我們知道了n-1時候的格雷碼,怎麼樣求出n時候的格雷碼呢。觀察可以看出,n時候的格雷碼首先是在n-1的格雷碼情況下順序在最高位新增0,然後反序在最高位新增1.這樣我們就可以得到下面的程式
//格雷碼輸出
#include #include #include #include #include using namespace std;
void gray(vector&v , int bit , int n)
for(int i = v.size()-1 ; i >= 0 ; i--)
v.swap(temp); //交換
gray(v,bit+1,n);
}vectorgetgray(int n)
int main()
//以上**實現了unsigned int型資料到格雷碼的轉換,最高可轉換32位自然二進位製碼,超出32位將溢位。
所以上面的**可以變為:
//格雷碼輸出
#include #include #include #include #include using namespace std;
vectorgetgray(int n)
return v;
}int main()
cout<}
return 0;
}
不過這樣輸出的是十進位制的數字。
生成格雷碼
程式設計題 生成格雷碼 在一組數的編碼中,若任意兩個相鄰的 只有一位二進位制數不同,則稱這種編碼為格雷碼 gray code 請編寫乙個函式,使用遞迴的方法生成n位的格雷碼。給定乙個整數n,請返回n位的格雷碼,順序為從0開始。測試樣例 1返回 0 1 思想 用遞迴法實現,把求n位格雷碼分解為求n 1...
生成格雷碼
題目描述 在一組數的編碼中,若任意兩個相鄰的 只有一位二進位制數不同,則稱這種編碼為格雷碼 gray code 請編寫乙個函式,使用遞迴的方法生成n位的格雷碼。給定乙個整數n,請返回n位的格雷碼,順序為從0開始。測試樣例 1返回 0 1 1 n 1時,返回0,1 2 n 2時,返回00,01,10,...
關於格雷碼
典型二進位制格雷碼 binary gray code 簡稱格雷碼,因1953年公開的弗蘭克 格雷 frank gray,18870913 19690523 專利 pulse code communication 而得名。在一組數的編碼中,若任意兩個相鄰的 只有一位二進位制數不同,則稱這種編碼為格雷碼...