3n+1解决方案给出错误的答案
3n+1 solution giving wrong answer
这是我对3n+1问题的解决方案,该问题给出了错误的答案。自过去 5 天以来,我一直在安静地挣扎很多次。请帮助我找出解决方案中的问题。我使用了尾递归,并且还存储了一张地图来跟踪 2 的幂以更快地找到答案。问题的链接是编程挑战 - 3n + 1 问题
#include <stdio.h>
#include <map>
using namespace std;
#define MAX 1000000
typedef long long int ll;
map<int, int> globalMap;
void process(){
ll i = 1, key = 1, value = 1;
while(value < MAX){
globalMap[value] = key;
key++; value *= 2;
}
return;
}
ll cycleLength(ll n, ll ans){
if(n == 1) return ans;
if(globalMap.find(n) != globalMap.end()) return ans+globalMap[n];
else{
if(n%2){
return cycleLength(3*n+1, ++ans);
}
else return cycleLength(n/2, ++ans);
}
}
int main(){
ll i, j, temp, max=-1;
process();
while(scanf("%lld%lld", &i, &j) != EOF){
max = -1;
for(ll a = i; a <= j; ++a){
temp = cycleLength(a, 0);
if(max < temp) max = temp;
}
printf("%lld %lld %lldn", i, j, max);
}
return 0;
}
您的process()
函数将填充globalmap
,使得 1 的周期长度为 1,但您的 cyclelength
函数如果传入 ll = 1
和 ans = 0
返回 0 的周期长度。
因此,在以下输入上:
1 1
1 2
您的程序将输出:
1 1 0
1 2 2
这似乎是你的sol'n的症结所在。
如果 i>j,您的解决方案将不起作用。
尝试从 i,j 的最小值迭代到 i,j 的最大值。
请注意,i 和 j必须按原始顺序打印,因此如果它们顺序错误,请不要只是交换 i 和 j。
相关文章:
- 使用 bfs 解决连接组件问题时得到错误的答案
- 递归求和任务的错误答案
- 为什么我在代码厨师的 CMPRSS 问题中得到 WA(错误答案)?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 乘法宏给出错误的答案
- 谷歌启动B轮巴士路线问题错误的答案?
- 欧拉项目 #8 C++ 得到错误的答案
- 寻找最小楼梯成本的动态规划问题的错误答案
- 为什么可变大小的数组会导致Codechef出现错误答案
- 位集上的按位或给出错误的答案
- 在 c++ 中将模板与类一起使用时,类成员函数的答案错误?
- SPOJ PLD的答案错误
- UVA 3n+1(概率 100)答案错误,但所有测试用例均已通过
- 散列!!答案错误,想不通
- 指数的最后一位——答案错误
- 在计算cpp中数字的n次方根时,答案错误
- Euler项目27的答案错误