4 2 3 4 0 0
12 7
思路:每个小猴子都会落在根节点上,因为前两个小猴子必是一个在左子树,一个在右子树。一般的,只需看小猴子编号的奇偶性,就能指导它是最终在哪棵子树中。对于那些落入根结点左子树的小猴子来说,只需知道小猴子是第几个落在根是左子树里面的,就可以知道它下一步是往左还是往右了。依此类推,直至小猴子落在叶子上。
如果使用题目给出的I,当I是奇数时,它是往左走的第(I+1)/2个小猴子;当I是偶数时,它是往右走的第I/2个小猴子。这样可以模拟最后一个小猴子的路线。
源代码:
#include <stdio.h> #include <stdlib.h> int main() { int n,m,i,k; while(~scanf("%d %d",&n,&m)&&(n,m)) { k=1; for(i=0;i<n-1;i++) { if(m%2) { k=k*2; m=(m+1)/2; } else { k=k*2+1; m=m/2; } } printf("%d\n",k); } system("pause"); return 0; }
原文地址:http://blog.csdn.net/zchlww/article/details/39453075