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;
}
作法 : 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;
}