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;
}