您的位置:首页 > 其它

ZCMU1158: 松哥的二叉树

2018-02-23 11:25 302 查看

Description

有一棵满二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从上到下从左到右编号为1,2,3,…,2^D-1。松哥在结点1处放下一个小球,它会往下落。每个结点都会有一个开关,初始全为关闭,当每次有小球落到一个开关上时,开关的状态都会改变(开变关,关变开)。当小球到达某个结点时,如果该结点上的开关关闭,则小球往左走,否则往右走,直到走到叶子结点。现在有n个小球依次从结点1开始往下落,松哥想要知道第n个小球落在哪个结点,你能告诉他嘛?

Input

多组测试数据。每组测试数据包含两个整数D(D<=30),n(n<=2^D-1)。

Output

对于每组测试数据输出一个整数,代表最后一个小球最终下落在哪个结点。

Sample Input

4 14 24 3

Sample Output

8
12
10
球先到节点上 然后开关状态再改变 (不是所以的开关状态改变,只是当前到的开关状态改变)
奇数球往左 偶数球往右
#include<bits/stdc++.h>using namespace std;/*1-2-4>81-3-6>121-2-5>101-3-7>14*/int main(){int d,n;while(scanf("%d%d",&d,&n)!=EOF){int k=1,i;for(i=0;i<d-1;i++){//奇数个,向左子树移动,偶数个,向右字树if(n%2!=0){k=k*2;//左k=k*2n=(n+1)/2;}else{k=k*2+1;//右k=k*2+1n=n/2;}}printf("%d\n",k);}return 0;} 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: