码迷,mamicode.com
首页 > 其他好文 > 详细

题目1113:二叉树

时间:2015-05-08 09:37:42      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:online judge   九度   二叉树   数据   math.h   

题目描述:

技术分享 


    如上所示,由正整数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 120 0
样例输出:
4


C++代码:

 #include<stdio.h>
    #include<math.h>
    int m,n,cnt;
    int main(void){
            while(scanf("%d%d",&m,&n)&&(m&&n)){
                    cnt = 0;
                    int i = 0;
                    int left = m;
                    while(m<n){
                            cnt += (int)pow(2.0,i++);
                            m = m*2+1;
                            left*=2;
                    }
                    if(n>=left)cnt+=n-left+1;
                    printf("%d\n",cnt);
            }
            return 0;
    }
/**************************************************************
    Problem: 1113
    User: Carvin
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1108 kb
****************************************************************/

代码2:

#include<stdio.h>
#include<math.h>
 
int main()
{
    int m,n;
    int left,right;
    int deep_m,deep_n;
    int deep_diff;
    int count=0;
    for(scanf("%d%d" ,&m,&n);(m!=0&&n!=0);scanf("%d%d",&m,&n ))
    {
        left=right=m;
        count=0;
        deep_m=(int)(log(float(m))/log(2.0)+1);   //计算节点m对应的深度
        deep_n=(int)(log(float(n))/log(2.0)+1);   //计算节点n对应的深度
        deep_diff=deep_n-deep_m;                  //计算深度差
        count+=(int)pow(2,(float(deep_diff)))-1;  //计算出
        for(int i=1;i<=deep_diff;++i)
        {
            left=2*left;
            right=2*right+1;
        }//for
        if(left<=n)
            count+=n-left+1;
        if(right<=n)
            count+=right-left+1;
        //cout<<count<<endl;
        printf("%d\n",count);
    }//for
    return 1;
}//main



题目1113:二叉树

标签:online judge   九度   二叉树   数据   math.h   

原文地址:http://blog.csdn.net/carvin_zh/article/details/45567847

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!