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;
}

Posted by richard爱闹 - 3月 10 2015
如需转载,请注明: 本文来自 Richard