zoukankan      html  css  js  c++  java
  • 题目1113:二叉树 (计算某个结点的子结点个数)

    题目描述:                       

    v:* {behavior:url(#default#VML);} o:* {behavior:url(#default#VML);} w:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}

        如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。
        比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。

    输入:                       

        输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 <= m <= n <= 1000000000)。最后一组测试数据中包括两个0,表示输入的结束,这组数据不用处理。

    输出:                       

        对于每一组测试数据,输出一行,该行包含一个整数,给出结点m所在子树中包括的结点的数目。

    样例输入:                       
    3 12
    0 0
    样例输出:                       
    4
    # include<iostream>
    //# include<stdio.h>
    using namespace std;
     
    # include<algorithm>
    /*
    int main()
    {
    int n,a[10001];
    int i, j, k;
    while (cin >> n, n)
    {
    for (i = 1; i <= n; i++)
    {
    cin >> a[i];
    }
    sort(a + 1, a + 1 + n);
    }
    return 0;
    }
    */
     
    int main()
    {
        int m, n;
        int i, j, k;
        while (cin >> m >> n)
        {
            if (m == 0 && n == 0)
            {
                break;
            }
            if (n < m)
            {
                cout << 0 << endl;
            }
            else if (n == m)
            {
                cout << 1 << endl;
            }
            else
            {
                k = 1; 
                j = 1;
                for (m *= 2; m <= n; m *= 2)
                {
                    j *= 2;
                    k += j;
                }
                if (m / 2 + j - 1 <= n)
                {
                    //do nothing
                }
                else
                {
                    k -= (m / 2 + j - 1 - n);
                }
                cout << k << endl;
            }
        }
        return 0;
    }
    /**************************************************************
        Problem: 1113
        User: mmcNuaa@163.com
        Language: C++
        Result: Accepted
        Time:0 ms
        Memory:1520 kb
    ****************************************************************/
    View Code
  • 相关阅读:
    基于Cat的分布式调用追踪
    python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上
    openlayers上添加点击事件
    openlayers在底图上添加静态icon
    vue中使用kindeditor富文本编辑器2
    openlayers绘制点,线,圆等
    openLayers绘制静态底图
    快速调用Android虚拟机
    flutter环境配置window10
    reactjs中配置代理跨域
  • 原文地址:https://www.cnblogs.com/mmcmmc/p/3887629.html
Copyright © 2011-2022 走看看