今天在看二叉樹,忽然發現有個題是跟二叉樹扯點邊,就順手把它做了。回過頭來看這個問題,會發現其實這個題真的很簡單。當初之所以沒有做而是放到了現在,就是自己犯了想當然的錯誤,認爲這個題是一個要用到二叉樹的題,自己沒有看二叉樹,肯定做不出來。就把它放到一邊了····實踐證明,這是一道水題·····一次直接水過。以前想的很麻煩,但是後來發現其實這個題很簡單。思路也很清晰。不斷的模擬小猴子在各個結點的選擇。先對輸入的小猴子的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;
}