2012-01-06 16:42:35Morris

[C/C++] 格雷碼(Gray code)

格雷碼(Gray code)是由貝爾實驗室的Frank Gray在1940年提出,用於在PCM脈衝編碼調變)方法傳送訊號時防止出錯,並於1953年三月十七日取得美國專利。格雷碼是一個數列集合,相鄰兩數間只有一個位元改變,為無權數碼,且格雷碼的順序不是唯一的。...

作法 : by wiki


#include<stdio.h>

void Print(unsigned n, int bit) {
    if(bit == 0)    return;
    Print(n>>1, bit-1);
    printf("%d", n&1);
}
int main() {
    int n;
    while(scanf("%d", &n) == 1) {
        unsigned i, j;
        for(i = 0; i < (1<<n); i++) {
            unsigned tmp = 0;
            for(j = 0; j < n; j++) {
                tmp |= (((i>>j)^(i>>(j+1)))&1)<<j;
            }
            Print(tmp, n);
            puts("");
        }
    }
    return 0;
}