#8359: 求各位大大幫忙小弟解決RE問題


joypad (jpdwiz)

學校 : 國立清華大學
編號 : 13442
來源 : [140.113.62.178]
最後登入時間 :
2020-05-17 23:04:13
d712. The 3n + 1 problem -- ms0472904 | From: [140.114.197.109] | 發表日期 : 2013-11-09 11:59

#include<iostream>
int p[1000001]={0};//存放每個n對於3n+1演算法的步驟數 
using namespace std;
void _(long long int n)
{
long long int cnt=0,t; 
while(n!=1)//3n+1演算法
{
if(n%2)
{
t=3*n+1;//n是奇數,n<-3n+1
while(t>1000000)
{
if(t%2)t=3*t+1;//n是奇數,n<-3n+1 
else t/=2;//n是偶數,n<-n/2
cnt++;//步驟數+1 
}
if(p[t]);//之前有算過(3n+1)的步驟數 
else _(t);//之前沒算過,算算看 
p[n]=p[t]+cnt+1;//存入結果 
return;
}
else
{
t=n/2;//n是偶數,n<-n/2
while(t>1000000)
{
if(t%2)t=3*t+1;//n是奇數,n<-3n+1 
else t/=2;//n是偶數,n<-n/2
cnt++;//步驟數+1 
}
if(p[t]);//之前有算過(n/2)的步驟數
else _(t);//之前沒算過,算算看
p[n]=p[t]+1;//存入結果
return;
}
}
p[n]=1;
return;
}
int main()
{
int i,j,max;
for(int i=1;i<=1000000;i++)_(i);
while(cin>>i>>j)
{
max=0;
for(int k=((i>j)?j:i);k<=((i>j)?i:j);k++)
{
if(p[k]>max)max=p[k]; 
}
cout<<i<<" "<<j<<" "<<max<<endl;
}
}
 
ZeroJudge Forum