Fork me on GitHub

格雷码--蓝桥杯

这道题结合树状数组的lowbite 运算可得到答案

#include <stdio.h>
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;
}
posted @ 2019-07-07 21:34  cznczai  阅读(180)  评论(0编辑  收藏  举报