题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=620
收获:对于一个节点K,其左子节点、右子节点的编号分别为2K和2K+1。对于二叉树有了基本的理解。
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
int D,I,T;
while(cin >>T){
if(T==-1) break;
while(T--){
cin >>D >> I;
int k=1;
for(int i=0;i<D-1;i++){
if(I%2==0) {k=k*2+1;I/=2;}//向右走
else {k=k*2;I=I/2+1;}//向左走
}
cout << k << endl;
}
}
return 0;
}