欧拉计划14th坠毁

Project Euler 14th crashes

本文关键字:坠毁 14th 计划      更新时间:2023-10-16

我正在尝试解决欧拉项目问题,在编译它的第 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 循环之后(这会更安全,但可能不会做你想要的我还没有检查过)。

相关文章: