题目描述
一颗完全二叉树,按照层序遍历方式分别编号1~n,有若干个小球从结点1即根节点开始下落,每个接待你内都有一个开关,初始时全部关闭。当小球落到一个结点之后,若结关闭,则小球向左孩子走,否则向右孩子走,直到走到叶节点。且当小球过了当前结点之后,结点的开关状态会改变(即先走再改变)。若有n个小球,求第n个小球最终会落在哪个叶结点上。
简单思路
小球到达一个结点,判断它是到达该结点的第几个小球。若为奇,则应向左走;若为偶,则应向右走。代码如下
# include<iostream>
using namespace std;
int d,n;
int main(){
while(cin>>d>>n){
int i=1;
for(int k=1;k<d;k++){
if(n%2) i*=2;
else i=i*2+1;
n=(n+1)/2;
}
cout<<i<<endl;
}
return 0;
}