Ball Down
算法黑书上一道题目,题意是深度为D的满二叉树,内部节点有开关,初始关,每个小球从root开始下降,如果关向左,否则向右,同时开关切换状态
我找了一下规律,发现二进制表示比较明显,
0000
1000
0100
1100
0010
1010
0110
1110
第一位是0101出现,第二位是0011出现,第三位是00001111出现,如此下去,因此有如下代码:
while(cin>>D>>I)
{
I--;
int bit, sum=0;
for(int k=1;k<=D-1;k++)
bit=I%(1<<k)/(1<<(k-1)), sum=sum*2+bit;
sum+=(1<<(D-1));
cout<<sum<<endl;
}