题目链接: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;
}
}