首页 > 其他 > 详细

小猴子下落(计蒜客)

时间:2020-03-11 22:41:48      阅读:85      评论:0      收藏:0      [点我收藏+]

有一颗二叉树,最大深度为 DD,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为 1,2,3,\cdots1,2,3,?,22 的 DD 次方减 11。在结点 11 处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关关闭,小猴子往左走,否则往右走,直到走到叶子结点。

一些小猴子从结点 11 处开始往下跑,最后一个小猴儿会跑到哪里呢?

输入格式

输入二叉树叶子的深度 DD,和小猴子数目 II,假设 II 不超过整棵树的叶子个数,D \le 20D20,最终以 000 结尾。

输出格式

输出第 II 个小猴子所在的叶子编号。

输出时每行末尾的多余空格,不影响答案正确性

样例输入

4 2
3 4
0 0

样例输出

12
7

算法:递推
思路:如果当前节点的猴子数量是奇数,那么猴子往左边走,否则猴子往右边走;
猴子每往下面走一层,递推出每层猴子的数量,整个大循环递推层数
往左走k = 2*k,往右走k=2*k+1

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstring>

using namespace std ;

int main(){
    int n, d ;    
    while(cin >> d >> n , d||n){
        int ans = 1 ;
        for(int i=1;i<d;i++){
            if(n%2){
                ans *= 2 ;
                n = (n+1)/2 ;
            }else{
                ans = ans * 2 + 1 ;
                n /= 2 ;
            }
        }
        cout << ans << endl ;
    }
    return 0 ;
}
 

 

 

...

小猴子下落(计蒜客)

原文:https://www.cnblogs.com/gulangyuzzz/p/12465073.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!