NEUQOJ:1104 3n+1数链

来源:互联网 发布:学校网络舆情应急预案 编辑:程序博客网 时间:2024/06/08 07:14

描述

题目描述:

在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。然而,在很多情况下我们并不知道哪一类问题可以解决,哪一类问题不可解决。现在我们就有这样一个问题,问题如下: (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之间即包括i也包括j。

输入:

输入多组数据,每行两个数分别是i和j(0<i<=j<10000)。

输出:

输出i到j区间中的(包括i和j)数链最长的长度,每行一个。

样例输入
1 10
样例输出
20
题解思路:

本题是一道递归问题,根据题目描述写出相对应的递归条件,即:

n为1时,返回;

n为奇数时,返回3n+1;

n为偶数时,返回n/2;

之后调用递归,在所给定的区间内比较所求循环节最长的数即可AC~

原创粉丝点击