解题思路:

为了采用规范化编程,建议把那个3n+1猜想写进一个函数,返回值是每个传入的数的循环长度。这个题思路也很简单,就是输入对于每次输入的i,j,先输出i,j,然后判断一下i和j的大小,始终让i保存最小的数,然后就写一个循环从i到j,弄一个maxlen初始化为0,循环时只要每个数最大循环长度大于maxlen,那就替换保存。



注意事项:

1、i,j的大小一定要判断,有可能i比j大,如果不判断,循环可能不执行

2、一定要先输出i,j,然后再做处理,这样才能保证i,j的输出和输入时一样,别等到最后输出i,j还有maxlen,因为途中i,j可能要改变顺序。



参考代码:

#include <iostream>

using namespace std;


int conject(int num)

{

    int len = 0;

    while (num!=1)

    {

        if (num%2==0)

            num /= 2;

        else

            num = num * 3 + 1;


        len++;

    }

    return len+1;

}

int main()

{

    int i, j;

    while (cin>>i>>j)

    {

        cout << i << " " << j << " ";

        if (i>j)

        {

            swap(i,j);

        }

        int maxlen = 0;

        for (int k=i; k<=j; k++)

        {

            if (conject(k)>maxlen)

                maxlen = conject(k);

        }


       cout << maxlen <<endl;

    }

    return 0;

}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论