Euler项目第14次崩溃

时间:2013-12-27 21:24:36

标签: c++

我正在尝试解决项目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;
}

我不知道出了什么问题。 请原谅我的错误,我真的很新。

1 个答案:

答案 0 :(得分:4)

你的阵列上的1越界,但我怀疑真正的问题,我认为这一行是问题所在:

int counter_array[1000000];

许多系统不会让你像这样在堆栈上分配一个数组。

好吧,你有第二个主要问题:

    counter_array[array_key]=   counter;
    array_key++;

鉴于它放置在内部循环中,每次迭代for循环时,arraykey将增加多次,因此将容易超出数组的大小。

我猜这里,但将数组decl移动到全局空间。然后将上面两行移动到while循环之后(这将更安全,但可能不会做你想要的我没有检查过)。