因爲今天才開始刷UVA的題目,首先肯定是拿到簡單題試試啦,這題水題一個,首先數據量很大,達到了1000000,如果寫個函數每次對區間內的數判斷循環數的話超時妥妥的,所以首先直接開個大數組,保存下來每個數字的循環次數,然後就是利用好已有的數字的循環次數來減少時間消耗,代碼如下:
#include <iostream>
#include <cstdio>
using namespace std;
int a[1000001];
int main(){
int n1,n2,max_len,cycle;
a[1] = 1;
a[2] = 2;
for(int i=3;i<1000001;i++){
cycle = 0;
long long temp = i;
while(1){
if(temp % 2 == 0){
temp /= 2;
cycle++;
}
else{
temp = temp*3 + 1;
cycle++;
}
if(temp<i){
a[i] = cycle + a[temp];
break;
}
}
}
while(scanf("%d%d",&n1,&n2)!=EOF){
max_len = -1;
int a1,b1;
if(n1>n2){
a1 = n2;
b1 = n1;
}
else{
a1 = n1;
b1 = n2;
}
for(int i=a1;i<=b1;i++){
if(a[i]>max_len)
max_len = a[i];
}
cout<<n1<<" "<<n2<<" "<<max_len<<endl;
}
//cout<<cal(22)<<endl;
return 0;
}