格雷码算法

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int a[1000] = {0};

void gray(int n)
{
    int i,j;
    if(n == 1) {a[0] = 0; a[1] = 1;}
    else {
        gray(n-1);
        j = pow(2,n-1);
        for(i = j;i<2*j;i++)
            {
                a[i] = a[2*j-1-i] + j;
            }
    }
}

int bitofh(int bi,int len)
{
    int i = 0;
    int temp = 1;
    while(i<len)
    {
        if((bi & (temp<<(len-i-1)))!=0)
        {
            printf("1");
        }
        else {printf("0");}
        i++;
    }
    printf("\n");
    return 0;
}

int main()
{
    char string[10];
    int n,k,b;
    scanf("%d",&n);
    gray(n);
    for(k=0;k<pow(2,n);k++)
    {
        bitofh(a[k],n);
    }
    return 0;
}

实现格雷码的输出

posted on 2017-12-06 22:26  暗影蔽日  阅读(270)  评论(0编辑  收藏  举报

导航