3n+1数链问题

3N+1数链问题

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:158            测试通过:120

描述

在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。然而,在很多情况下我们并不知道哪一类问题可以解决,哪一类问题不可解决。现在我们就有这样一个问题,问题如下:

(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 从文本文件LINK.DAT输入,文件只有一行,即为正整数ijij之间以一个空格隔开。0j<10000;

输出

要求将你的程序的运行结果写入文本文件LINK.OUT中,文件只能有一行,即为ij之间的最长链长。

样例输入

1 10

样例输出

20

#include
#include
#include
#include
#include
using namespace std;
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        int miax=0;
        for(int j=n; j<=m; j++)
        {
            int num=0;
            long long int tem;
            tem = j;
            while(tem>1)
            {
                if(tem%2!=0) tem = 3*tem+1;
                else tem/=2;
                num++;
            }
             miax=max(miax,num);
                //if(miax

你可能感兴趣的:(简单数学)