#include<iostream>
using namespace std;
int main(){
long long int a,b,i,n,t,max=0,sum=1;
while(cin>>a>>b){
cout<<a<<" "<<b<<" ";
if(a>b) {t=a; a=b; b=t;}
for(i=a; i<=b; i++){
n=i;
while(n!=1){
sum++;
if(n%2!=0) n=3*n+1;
else n/=2;
}
if(sum>max) max=sum;
sum=1;
}
cout<<max<<endl;
max=0;
}
}
會TLE,請各位大大教一下
#include
using namespace std;
int main(){
long long int a,b,i,n,t,max=0,sum=1;
while(cin>>a>>b){
cout<<a<<" "<<b<<" ";
if(a>b) {t=a; a=b; b=t;}
for(i=a; i<=b; i++){
n=i;
while(n!=1){
sum++;
if(n%2!=0) n=3*n+1;
else n/=2;
}
if(sum>max) max=sum;
sum=1;
}
cout<<max<<endl;
max=0;
}
}
會TLE,請各位大大教一下
都是YP的,提供你幾個意見
運算法:
1.n/=2替換成n>>1,用位元平移處理比較快,比用除法快了6倍左右
2.n*3+1的結果必為偶數,直接跳到n>>1,減少判斷次數
3.把跑過的數字存起來,減少重複跑的次數
輸入輸出:
1.加入ios::sync_with_stdio(false);關閉cin,cout與scanf,printf的同步
2.加入cin.tie(0);使cin,cout鬆綁
3.把endl換成'\n'