我使用以下代码来解决问题#14但是由于一些奇怪的原因它没有输出。也许它花了太长时间才能运行??? P.S.I我知道max不应该是答案,但仍然没有输出,而对于像i <100这样的较小值我得到输出。
#include <iostream>
long collatz(long);
int main()
{
using namespace std;
long i=3,max;
for(i=3;i<1000000;i++)
{
max=collatz(i-1);
if(collatz(i)>collatz(i-1))
{
max=collatz(i);
}
else
{
max=collatz(i-1);
}
}
cout<<max<<endl;
cin.clear();
cin.get();
}
long collatz(long n)
{
int count=0;
while(n!=1)
{
if(n%2==0)
{
n=n/2;
count+=1;
}
else
{
n=3*n+1;
}
}
return count;
}
答案 0 :(得分:4)
如果您使用n = 113383调用collatz,则会出现溢出并且n变为负值,从而无法恢复。所以你有一个无限循环,因为它永远不会是1.你需要使用一个很长的内部拼贴。
但是,你的collatz功能还有其他问题。另外,main中循环的逻辑不正确。您每次通过循环重置最大值。因此,您报告的结果将是collatz(999999)或collatz(999998)。但这不是正确的答案。