poj1207

3n+1問題是一個簡單有趣而又沒有解決的數學問題。這個問題是由L. Collatz在1937年提出的。克拉茲問題(Collatz problem)也被叫做hailstone問題、3n+1問題、Hasse算法問題、Kakutani算法問題、Thwaites猜想或者Ulam問題。
    問題如下:
        (1)輸入一個正整數n;
        (2)如果n=1則結束;
        (3)如果n是奇數,則n變爲3n+1,否則n變爲n/2;
        (4)轉入第(2)步。
    克拉茲問題的特殊之處在於:儘管很容易將這個問題講清楚,但直到今天仍不能保證這個問題的算法對所有可能的輸入都有效——即至今沒有人證明對所有的正整數該過程都終止。

【題目要求】
    對於[i,j]之內的數,輸出最大的歩數。
【提示】
     1、注意i,j的大小,如果 i>j 則計算的時候要交換一下,輸出按原來的順序。
     2、初始步數應該爲1.或者說最後一步判定爲1時要補上1步。
     [摘自](http://www.cnblogs.com/CocoonFan/archive/2013/03/02/2940336.html)
     n=n/2*3+2,可以理解爲 3((2k+1)+1)/2,其中2k+1爲任意非0奇數,相當於直接執行了2步,不這麼寫也可以。

#include<cstdio>
#include<algorithm>
using namespace std;
int step(int n){
    int steps=1;
    while(n!=1){
        if(n%2){
            n=n/2*3+2;
            steps+=2;
        }
        else{
            n/=2;
            steps++;
        }
    }
    return steps;
}
int main(){
    int n,m,maxnum,temp,a,b;
    while(~scanf("%d%d",&n,&m)){
        b=max(n,m);
        a=min(n,m);
        maxnum=0;
        for(int i=a;i<=b;i++){
            temp=step(i);
            if(maxnum<temp){
                maxnum=temp;
            }
        }
        printf("%d %d %d\n",n,m,maxnum);
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章