poj1207
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}
以上是关于poj1207的主要内容,如果未能解决你的问题,请参考以下文章