poj1207

1.链接地址

     https://vjudge.net/problem/POJ-1207

2.问题描述

 Problems in Computer Science are often classified as belonging to a certain class of problems (e.g., NP, Unsolvable, Recursive). In this problem you will be analyzing a property of an algorithm whose classification is not known for all possible inputs. 
Consider the following algorithm: 



1. input n

2. print n

3. if n = 1 then STOP

4. if n is odd then n <-- 3n+1

5. else n <-- n/2

6. GOTO 2


Given the input 22, the following sequence of numbers will be printed 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 

It is conjectured that the algorithm above will terminate (when a 1 is printed) for any integral input value. Despite the simplicity of the algorithm, it is unknown whether this conjecture is true. It has been verified, however, for all integers n such that 0 < n < 1,000,000 (and, in fact, for many more numbers than this.) 

Given an input n, it is possible to determine the number of numbers printed before the 1 is printed. For a given n this is called the cycle-length of n. In the example above, the cycle length of 22 is 16. 

For any two numbers i and j you are to determine the maximum cycle length over all numbers between i and j. 

输入样例

1 10
100 200
201 210
900 1000

输出样例

1 10 20
100 200 125
201 210 89
900 1000 174

3.解题思路

 一开始想的就是暴力解,但是不知道有没有什么简便的方法,查了一下题解好像都是暴力,行吧。。。

4.算法实现源代码

#include <iostream>
#include <cstdio>
using namespace std;
int count(int num)
{   
    int sum=1;
    while(1)
    {
        if(num==1)
        {
            return sum;
        }
        if(num%2!=0)
        {
            num=3*num+1;sum++; 
        }
        if(num%2==0) 
        {
            num=num/2;sum++;
        }   
    }
}
int main()
{
    int low,high,i;
    while(cin>>low>>high)
    {
        int m =low,n=high;  
        if(low>high)
        {   
            int temp  = low;
            low  = high;
            high = temp;
        }
        int max = count(low); 
        for(i=low;i<=high;i++)
        {
            int num = count(i);
            if(num >max)  max = num ;
        }
        cout<<m<<" "<<n<<" "<<max<<endl; 
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/KasenBob/p/11163393.html