根據右圖測試資料可知,一共有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請讀者看看四層二叉樹(上左圖)和上表中對比不難發現,進入第n個結點的次數i為奇數(即前面已有n-1過猴子訪問過該結點),那麼遍歷其左子樹根;
若為偶數,則遍歷其右子樹根。
因此,對照上表,得出規律:i為奇數,k=k*2;i=(i+1)/2;//第i個進入左子樹
i為偶數,k=k*2+1;i=i/2; //第i個進入右子樹
例如第1個猴子:則對於第乙個結點來說,i=1為奇數,那麼下乙個要走的結點k=1*2=2;然後i=(1+1)/2=1(第乙個進入左子樹),繼續判斷其左子樹i的奇偶性……
第3個猴子:則對於第乙個結點來說,i=3為奇數,那麼下乙個要走的結點k=1*2=2;然後i=(3+1)/2=2(第二個進入左子樹)……
第5個猴子:則對於第乙個結點來說,i=5為奇數,那麼下乙個要走的結點k=1*2=2;然後i=(5+1)/2=3(第三個進入左子樹)……
code:
#includeusing namespace std;
int main()
{ int d,i,k;
while(cin>>d>>i && (d+i) !=0)
{k=1;
for (int j=0;j
NYOJ63 小猴子下落 二叉樹性質
有一顆二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從左到右從上到下的編號為1,2,3,2的d次方減1。在結點1處放乙個小猴子,它會往下跑。每個內結點上都有乙個開關,初始全部關閉,當每次有小猴子跑到乙個開關上時,它的狀態都會改變,當到達乙個內結點時,如果開關關閉,小猴子往左走,否則往右走,直...
nyoj63小猴子下落 二叉樹推導
時間限制 3000 ms 記憶體限制 65535 kb 難度 3描述 有一顆二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從左到右從上到下的編號為1,2,3,2的d次方減1。在結點1處放乙個小猴子,它會往下跑。每個內結點上都有乙個開關,初始全部關閉,當每次有小猴子跑到乙個開關上時,它的狀態都...
NYOJ 63 小猴子下落
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 有一顆二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從左到右從上到下的編號為1,2,3,2的d次方減1。在結點1處放乙個小猴子,它會往下跑。每個內結點上都有乙個開關,初始全部關閉,當每次有小猴子跑到乙個開關上時,它的狀態...