• 这道题结合树状数组的lowbite 运算可得到答案
#include 
void show(int a,int n)
{
    int i;
    int msk = 1<<n;
    for(i=0; i<n; i++){
        printf((a & msk)? "1" : "0");
        msk = msk >> 1;
    }
    printf("\n");
} 
void f(int n)
{
    int i;
    int num = 1;
    for(i=0; i<n; i++) num = num<<1;
    int a = 0;
    for(i=0; i<num; i++){
        show(a,n);
        if(i%2==0){
            a = a ^ 1;
        }
        else{
            a = a^((a&(-a))<<1) ; //填空
        }
    }
}
int main()
{
    f(4);
    return 0;
}