欧拉计划14th坠毁
Project Euler 14th crashes
我正在尝试解决欧拉项目问题,在编译它的第 14 个问题上,exe 不断崩溃。这是我的代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int counter_array[1000000];
int array_key=0;
for(int x=1;x<=1000000;x++)
{
int y=x;
int z=1;
int counter=0;
while(z==1)
{
if((y%2)==0 && y>1)
{
y=y/2;
}
else
{
if((y%2)!=0 && y>1)
{
y=(3*y)+1;
}
else
{
z=2;
}
}
counter++;
counter_array[array_key]={counter};
array_key++;
}
}
int temp=0;
int pos=0;
for(int i=0; i<1000000;i++)
{
if(counter_array[i]>temp)
{
temp=counter_array[i];
pos=i;
}
}
cout << pos << "----->"<<temp << endl;
}
我不知道出了什么问题。请原谅我的错误,我在这方面真的很新.
你在数组上越界了 1,但我怀疑真正的问题,我认为这一行是问题所在:
int counter_array[1000000];
许多系统不会让你像这样在堆栈上分配数组。
好的,您有第二个主要问题:
counter_array[array_key]= counter;
array_key++;
鉴于它位于内部循环中,ArrayKey 将在 for 循环的每次迭代中增加很多倍,因此很容易超过数组的大小。
我在这里猜测,但将数组 decl 移动到全局空间。然后将上面的两行移动到 while 循环之后(这会更安全,但可能不会做你想要的我还没有检查过)。
相关文章: