zoukankan      html  css  js  c++  java
  • 九度OJ 1113 二叉树

    题目地址:http://ac.jobdu.com/problem.php?pid=1113

    题目描述:

     


        如上所示,由正整数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 <stdio.h>
     
    int main(void){
        int m,  n, cnt, num, left, right;
     
        while (scanf ("%d%d", &m, &n) != EOF && m != 0 && n != 0){
            cnt = num = 1;
            left = 2 * m;
            right = 2 * m + 1;
            while (right <= n){
                num *= 2;
                cnt += num;
                left *= 2;
                right = 2 * right + 1;
            }
            if (left <= n)
                cnt += (n-left+1);
            printf ("%d
    ", cnt);
        }
     
        return 0;
    }
    


  • 相关阅读:
    多线程编程核心技术(五)死锁
    SELinux详细配置
    Linux实现RAID
    iSCSi的基本配置
    文本超出省略号之前后省略号实现
    对象冻结
    条件判断的优美写法
    使用VConsole
    重绘和重排(回流)
    移动端rem布局
  • 原文地址:https://www.cnblogs.com/liushaobo/p/4373842.html
Copyright © 2011-2022 走看看