-1

我使用以下代码来解决问题#14,但由于某种奇怪的原因它没有输出。也许运行时间太长???PSI 知道 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;
}
4

1 回答 1

5

如果你用 n = 113383 调用 collat​​z,你会溢出并且 n 变成负数,它永远不会恢复。所以你有一个无限循环,因为它永远不会是 1。你需要使用 long long 内部 collat​​z。

但是,正如其他人指出的那样,您的 collat​​z 函数还有其他问题。此外,您在 main 中的循环逻辑不正确。您每次通过循环都重置最大值。因此,您报告的结果将是 collat​​z(999999) 或 collat​​z(999998)。但这不是正确的答案。

于 2012-12-17T22:54:22.063 回答