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的主要内容,如果未能解决你的问题,请参考以下文章

Android:向活动添加片段

POJ2778DNA Sequence(AC自动机)

POJ3691DNA repair(AC自动机,DP)

北大ACM - POJ试题分类

从另一个片段的其他视图控制片段的视图

18.06.03 POJ 4126:DNA 15年程设期末05(状压DP)