時間限制:3000 ms | 記憶體限制:65535 kb 難度:3
描述
有一顆二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從左到右從上到下的編號為1,2,3,·····,2的d次方減1。在結點1處放乙個小猴子,它會往下跑。每個內結點上都有乙個開關,初始全部關閉,當每次有小猴子跑到乙個開關上時,它的狀態都會改變,當到達乙個內結點時,如果開關關閉,小猴子往左走,否則往右走,直到走到葉子結點。
一些小猴子從結點1處開始往下跑,最後乙個小猴兒會跑到**呢?
輸入
輸入二叉樹葉子的深度d,和小猴子數目i,假設i不超過整棵樹的葉子個數,d<=20.最終以 0 0 結尾輸出
輸出第i個小猴子所在的葉子編號。樣例輸入:
4 2樣例輸出:3 40 0
12解析:7
#include
#include
#include
using
namespace std;
intmain()
int res=1;
//記錄猴子的最終位置
int sum=
pow(
2,d)
;//記錄節點的總數
memset
(isvisited,
0,sum*
sizeof
(int))
;for
(int i=
1;i<=i;i++
)//依次落入小猴子
else
tmp=
2*tmp;
}else
else
tmp=
2*tmp+1;
}}} cout<}return0;
}
tips:
自己畫一下完全二叉樹就知道了,節點的編號是很緊湊的,可以填充好乙個陣列。
判斷條件是一旦計算的下乙個節點超出二叉樹頂點數,就結束,輸出當前節點。
由於最多有20層的數,近100萬元素的陣列,記憶體消耗太大了。記憶體消耗較小的方法是,不用設定標記陣列去判斷。
#include
using
namespace std;
intmain()
else
} cout << res << endl;
}}
nyoj 63 小猴子下落 二叉樹
根據右圖測試資料可知,一共有n行 3,4,5 x個猴子中每2 n出現一迴圈,理由就是它是滿二叉樹。根據左圖四層我們列出資料看看 第1只猴子12 48第2只猴子13 612第3只猴子12 510第4只猴子13 714第5只猴子12 49第6只猴子13 613第7只猴子12 511第8只猴子13 715...
XYNUOJ1843 小猴子下落 二叉樹
時間限制 3 sec 記憶體限制 64 mb 提交 55 解決 44 您該題的狀態 已完成 提交 狀態 討論版 題目描述 有一顆二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從左到右從上到下的編號為1,2,3,2的d次方減1。在結點1處放乙個小猴子,它會往下跑。每個內結點上都有乙個開關,初始...
NYOJ63 小猴子下落 二叉樹性質
有一顆二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從左到右從上到下的編號為1,2,3,2的d次方減1。在結點1處放乙個小猴子,它會往下跑。每個內結點上都有乙個開關,初始全部關閉,當每次有小猴子跑到乙個開關上時,它的狀態都會改變,當到達乙個內結點時,如果開關關閉,小猴子往左走,否則往右走,直...