题目描述:
在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。然而,在很多情况下我们并不知道哪一类问题可以解决,哪一类问题不可解决。现在我们就有这样一个问题,问题如下:
(1) 输入一个正整数n;
(2) 把n显示出来;
(3) 如果n=1则结束;
(4) 如果n是奇数则n变为3n+1,否则n变为n/2;
(5) 转入第(2)步。
例如对于输入的正整数22,应该有如下数列被显示出来:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
我们推测:对于任意一个正整数,经过以上算法最终会推到1.尽管这个算法很简单,但是我们仍然无法确定我们的推断是否正确。不过好在我们有计算机,我们验证了对于小于1000000的正整数都满足以上推断。
对于给定的正整数n,我们把显示出来的数的个数定义为n的链长,例如22的链长为16.
你的任务是编写一个程序,对于任意一对正整数i和j,给出i与j之间的最长链长,当然这个最长链长是由i与j之间的其中一个正整数产生的。我们这里的i与j之间即包括

该博客探讨了3n+1数列问题,即输入一个正整数n,通过n为奇数时变为3n+1,偶数时变为n/2,直至n=1的过程。博主提供了ACM竞赛中的一道题目,要求找出在i和j之间(包含i和j)的正整数中,3n+1链最长的长度。通过模拟数列变换并计算链长,博主给出了一段C++代码实现,用于计算指定范围内最大链长,并给出了不同测试输入和输出的例子。
最低0.47元/天 解锁文章
392

被折叠的 条评论
为什么被折叠?



