zoukankan      html  css  js  c++  java
  • 九度OJ 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
    来源:
    2007年北京大学计算机研究生机试真题
    #include <cstdio>
    using namespace std;
    int main(){
        int n,m;
        while(scanf("%d%d",&m,&n) != EOF){
            if(m == 0 && n == 0)break;
            int t = m;
            int ans = 1;
            int temp = 1;
            while(n > t){
                t = 2*t+1;
                temp *= 2;
                ans += temp;
            }
            if(m*temp > n)ans -= temp;
            else ans = ans - temp + n - m*temp +1;
            printf("%d
    ",ans);
    
        }
    }
  • 相关阅读:
    java 单例模式
    java 设计模式
    android 设计模式
    我的坦克兵爷爷也曾扬威世界
    我的坦克兵爷爷也曾扬威世界
    LD_LIBRARY_PATH设置问题
    LD_LIBRARY_PATH设置问题
    销售员和程序员
    销售员和程序员
    如何成为Python高手
  • 原文地址:https://www.cnblogs.com/starryxsky/p/7095358.html
Copyright © 2011-2022 走看看