解题思路:

利用递归思路,和满二叉树的性质,一个结点的左孩子会等于 该节点i*2 右孩子会等于i*2+1,而左孩子又会有左右孩子,右孩子也会有左右孩子

则可以利用递归,递归的出口就是 左孩子 都右孩子 大于n 利用count变量来记录 



注意事项:

参考代码:

    #include<iostream>

    #include<string>

    using namespace std;

    void digui(int left,int right,int n,int& count)

    {

        if(left<=n)

        {

            count++;

            digui(left*2,left*2+1,n,count);

        }

        if(right<=n)

        {

            count++;

            digui(right*2,right*2+1,n,count);

        }

    }

     

    void test01()

    {

        int m,n;

        while(cin>>m>>n &&(m!=0&&n!=0))

        {

            int count =1;

            int left =2*m;

            int right =2*m+1;

            digui(left,right,n,count);

            cout<<count<<endl;

        }

    }





    int main()

    {

        test01();

        return 0;

    }


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论