项目Euler#11每次运行时都会产生不同的结果?

时间:2014-12-08 15:24:52

标签: c++

我对c ++和编程一般都很新,所以我在项目euler上做了一些问题来练习。我在问题11上遇到了这个问题:

我从一个二维20乘20的数组开始,我需要输入所有数字,然后分成几个函数;一个循环并找到最大的前向对角线产品,一个用于最大的向后方向......所以一旦所有这些产品运行完毕,每个产品的回报都会进行比较,找到最大的产品。

据我所知,他们都是从垂直方向开始工作的,这似乎每次产生不同的结果,并且大约是100倍。

horrizontal看起来像这样,似乎有效:

int horizontal(int v[20][20]){
    int x = 0, y = 0 ,out = 1, attempt = 1;
    for (x = 0; x <= 15; x++){
        for (y = 0; y <= 20; y++){
            attempt = v[x][y]*v[x+1][y]*v[x+2][y]*v[x+3][y];
            if (attempt >= out)
                out = attempt;

产生不同结果的垂直结构:

int vert(int v[20][20]){
    int x = 0, y = 0 ,out = 1, attempt = 1;
    for (y = 0; y <= 15; y++){
        for (x = 0; x <= 19; x++){
            attempt = v[x][y]*v[x+1][y]*v[x+2][y]*v[x+3][y];
            if (attempt >= out)
                out = attempt;
        }
    }
    return out;
}

我无法理解为什么输出每次都会改变垂直输出而不是其他输出。

1 个答案:

答案 0 :(得分:3)

即使v[x+1]本身直到v[x+2]的最大索引,您也会在每次迭代时访问v[x+3]xv

据推测,您只打算将x循环到16个。相反,您显然已经在另一个方面采用了此方法!

此外,您编写了15而不是16,并且在您的横向版本中,由于某种原因,您一直循环到20。尝试更多地关注你的代码并考虑使用常量而不是#34;魔术数字&#34;。