#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
#define MAXN 1000000+10
using namespace std;
/*
关键 :
①运算中间数过大用long long;
②可以先把所有数的对应函数值求出来(构造结果表)再让用户输入;
③由于创建表时是从小到大一个个数创建的, 因此比i小的元素的环数一定已经计算过了, 可以直接加上去(不走已走过的路径, 优化)
④看清题目对输入输出数字的顺序要求, 若需要则交换
*/
long long cnts[MAXN];
long long maxcnt;
int main(){
int i,j;
long long x,cnt;
cnts[1] = 1;
for(long long i=2; i<MAXN; i++){
cnt = 0;
x = i;
while( 1 ){
cnt++;
if( x&1 ){
x = (3*x+1);
}else{
x = x/2;
}
if( x<i ){
cnt += cnts[x];
break;
}
}
cnts[i] = cnt;
}
while( ~scanf("%d %d",&i,&j) ){
maxcnt = 0;
int a = i, b = j;
if( i>j ) swap(i,j);
for( int k=i; k<=j; k++){
maxcnt = max(cnts[k], maxcnt);
}
printf("%d %d %I64d\n",a,b,maxcnt);
}
return 0;
}HDU 1032(3n+1问题)
最新推荐文章于 2022-04-05 23:40:51 发布
本文介绍了一个关于3x+1猜想的高效算法实现方案,通过使用long long类型来处理大整数运算,并预先计算每个数的对应函数值以避免重复计算,从而显著提高了算法效率。
7万+

被折叠的 条评论
为什么被折叠?



