习题:格雷码(找规律)

题目

思路

其实我们可以很轻易的发现规律
对于长度为k位的格雷码
\(2^{k-1}\)的数的第一位一定是0
\(2^{k-1}\)的数的第一位一定是1
有了这个规律之后
我们就可以将目标数位一步步分解

代码

#include<iostream>
#include<cstdio>
using namespace std;
unsigned long long n;
unsigned long long k;
unsigned long long bas=1;
int main()
{
	freopen("code.in","r",stdin);
	freopen("code.out","w",stdout);
	cin>>n>>k;
	n--;
	while(n)
	{
		if(k<(bas<<n))
		{
			cout<<'0';
			n--;
		}
		else
		{
			cout<<'1';
			k=(bas<<n)-(k-(bas<<n))-1;
			n--;
		}
		//cout<<'\n'<<"k:"<<k<<'\n';
	}
	if(k==0)
		cout<<'0';
	else
		cout<<'1';
	return 0;
}

posted @ 2019-11-18 16:20  loney_s  阅读(308)  评论(0)    收藏  举报