• 小猴子下落


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

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

    http://acm.nyist.net/JudgeOnline/problem.php?pid=63

    根据二叉树的性质,对于一内节点k,其孩子节点为2*k和2*k+1。

    #include<iostream>
    #include<cmath>

    #include<cstring>
    using namespace std;
    int main()
    {
        int D,I,n;
        int a[1<<20];
        cin>>D>>I;
        long k=1;
        while(D!=0&&I!=0)
        {
            n=(1<<D)-1;
            memset(a,0,sizeof(a));
            for(int i=0;i<I;i++)
            {
                k=1;
                for(;;)
                {
                    a[k]=!a[k];
                    if(a[k])
                    {
                        k=2*k;
                    }
                    else
                    {
                        k=2*k+1;
                    }
                    if(k>n)
                        break;
                }
            }
            cout<<k/2<<endl;
            cin>>D>>I;
        }
        return 0;
    }

  • 相关阅读:
    10-12
    8-10
    5.2-5.3
    四则运算 测试与封装
    第5-7章
    汉堡包
    1-5章
    实验二
    实验一
    Controller方法是如何与请求匹配上的及参数如何填充的
  • 原文地址:https://www.cnblogs.com/hutao886/p/4496301.html
Copyright © 2020-2023  润新知