POJ——1207(3N+1 问题)

题目链接:http://poj.org/problem?id=1207

                //对此只有呵呵了。。。。。

源代码:

(1)
#include <algorithm>
#include <iostream>
using namespace std ;


int main ()
{
    int n , m ;
    while ( cin >> n >> m )
    {
        int y ;
        int i ;
        
        int max_ = 0 ;
 

        //min和max函数,algorithm里面有,可以直接使用
        for ( int x = min ( n , m ) ; x <= max ( n , m ) ; ++ x ) 

        {

            for ( i = 1 , y = x ; y > 1 ; i ++ )
            {
                if ( y % 2 == 0 )
                    y /= 2 ;
                else
                    y = y * 3 + 1 ;
            }
            if ( i > max_ )
                max_ = i ;
        }
        cout << n << " " << m << " " << max_ << endl ;
    }
    return 0 ;
}

(2)再次写的代码:

#include<iostream>
#include<algorithm>
using namespace std;
int flag[1000005];//标志数组
int  main()
{
int m,n;
int re;
int count;
int i,j;
while(cin>>m>>n)
{
for(j=min(m,n);j<=max(m,n);j++) flag[j]=0;
              re=-1;//保存最终结果
for(i=min(m,n);i<=max(m,n);i++)
{
if(flag[i]==1) continue;
j=i;
count=1;
  while(j!=1)
  {
  count++;
if(j%2==0) 
{
j/=2;
if(j>=min(m,n)&&j<=max(m,n)) flag[j]=1;//标记
}
else 
{
j=j*3+1;
if(j>=min(m,n)&&j<=max(m,n)) flag[j]=1;//同上
}
}
if(count>re)    re=count;

  }
  cout<<m<<" "<<n<<" "<<re<<endl;

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值