习题:格雷码(找规律)
题目

思路
其实我们可以很轻易的发现规律
对于长度为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;
}

浙公网安备 33010602011771号