这道题是考二叉树的结构的
比较容易想到 某个小猴子到达某个点的时候 往左子树还是右子树 取决于他是第几个到达该点的 一颗深度为n的树需要往下走n - 1步
首先这是一颗完全二叉树
解题的关键在于 对于一个编号为t的节点 他的左子树的编号为t*2 右子树的编号为t * 2 + 1 这是二叉树的性质
#include <iostream>
using namespace std;
int main()
{
int n, t;
while (cin >> n >> t && (n + t)) {
int k = 1;
for (int i = 0; i < n - 1; i ++) {
if(t & 1) {//这个小猴子是第奇数个到达当前点的
t = (t + 1) >> 1;//往左子树分(t + 1) / 2个小猴子
k <<= 1;//编号翻倍
}
else {
t >>= 1;
k = k << 1 | 1;
}
}
cout << k << endl;
}
}