我正在尝试解决项目Euler问题,并且在14th question编译时,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;
}
我不知道出了什么问题。 请原谅我的错误,我真的很新。
答案 0 :(得分:4)
你的阵列上的1越界,但我怀疑真正的问题,我认为这一行是问题所在:
int counter_array[1000000];
许多系统不会让你像这样在堆栈上分配一个数组。
好吧,你有第二个主要问题: counter_array[array_key]= counter;
array_key++;
鉴于它放置在内部循环中,每次迭代for循环时,arraykey将增加多次,因此将容易超出数组的大小。
我猜这里,但将数组decl移动到全局空间。然后将上面两行移动到while循环之后(这将更安全,但可能不会做你想要的我没有检查过)。