今天在看二叉树,忽然发现有个题是跟二叉树扯点边,就顺手把它做了。回过头来看这个问题,会发现其实这个题真的很简单。当初之所以没有做而是放到了现在,就是自己犯了想当然的错误,认为这个题是一个要用到二叉树的题,自己没有看二叉树,肯定做不出来。就把它放到一边了····实践证明,这是一道水题·····一次直接水过。以前想的很麻烦,但是后来发现其实这个题很简单。思路也很清晰。不断的模拟小猴子在各个结点的选择。先对输入的小猴子的m编号进行判断,如果它是奇数,那么它就是第(m+1)/2个小猴子,那么它的编号就是2k;偶数的话就是第m/2个小猴子。
思路就是这样,下面就是写代码。
原题地址:点击打开链接。
代码如下:
#include<iostream> using namespace std; int main() { int i,k,n,m; while(1) { cin>>n >>m; if(n==0&&m==0)break; 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/=2;} cout<<k<<endl; }return 0; }