/*
3n+1 conjecture
*/
#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;
const int MAXN = 1000002;
int d[MAXN];
int dp(int n)
{
if(n < MAXN) {
if(d[n]) return d[n];
if(n%2) return d[n] = dp((3*n + 1)/2) + 2;
else return d[n] = dp(n/2) + 1;
} else {
if(n%2) return dp(3*n + 1) +1;
else return dp(n/2) + 1;
}
}
void pre()
{
int n = 1;
int cnt = 1;
while(n < MAXN) {
d[n] = cnt++;
n *= 2;
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
memset(d, 0, sizeof(d));
pre();
int i, j;
while(scanf("%d%d", &i, &j) == 2) {
int a, b;
if(i<j) {
a = i; b =j;
} else {
a = j; b = i;
}
int m=-1, v;
for(int k=a; k<=b; k++) {
v = dp(k);
if(v>m) m = v;
}
printf("%d %d %d\n", i, j, m);
}
return 0;
}
UVa 100 - The 3n + 1 problem
最新推荐文章于 2020-07-26 13:17:50 发布
本文介绍了一个关于3n+1猜想的C++程序实现,该程序使用动态规划方法预先计算了部分数值,并通过文件输入输出进行测试。主要内容包括:算法逻辑、动态规划的应用以及如何高效地处理大范围内的整数。

323

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



