解题思路:
为了采用规范化编程,建议把那个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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复