Euler#11项目每次运行时都会产生不同的结果? 我对C++和编程都比较陌生,所以我正在做项目Euler的练习。我在问题11中遇到了这个问题:

Euler#11项目每次运行时都会产生不同的结果? 我对C++和编程都比较陌生,所以我正在做项目Euler的练习。我在问题11中遇到了这个问题:,c++,C++,我从一个包含我需要输入的所有数字的二维20乘20数组开始,然后定义了几个函数;一个循环,找出最大的前向对角线积,一个求最大的后向积等。。。因此,一旦所有这些都运行完毕,就要对每一项的回报进行比较,找出最大的回报 据我所知,它们都是从垂直方向工作的,似乎每次都会产生不同的结果,大约是100倍 水平方向的一个看起来像这样,并且似乎有效: int horizontal(int v[20][20]){ int x = 0, y = 0 ,out = 1, attempt = 1; for

我从一个包含我需要输入的所有数字的二维20乘20数组开始,然后定义了几个函数;一个循环,找出最大的前向对角线积,一个求最大的后向积等。。。因此,一旦所有这些都运行完毕,就要对每一项的回报进行比较,找出最大的回报

据我所知,它们都是从垂直方向工作的,似乎每次都会产生不同的结果,大约是100倍

水平方向的一个看起来像这样,并且似乎有效:

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水平(int v[20][20]){
int x=0,y=0,out=1,trust=1;

对于(x=0;x而言,您在每次迭代中都会访问
v[x+1]
v[x+2]
v[x+3]
,即使
x
本身正好达到
v
的最大索引

大概您只打算循环
x
到16。相反,您显然在另一个维度上采用了这种方法


此外,你写了15个,而不是16个,在你的水平版本中,由于某种原因,你一直循环到20。尝试更多地关注你的代码,考虑使用常量而不是“魔法数字”。

你正在访问<代码> v[x+3] ,<代码> v[x+4] < /> >和<代码> v[x+3 ]。
在每次迭代中,即使
x
本身直接上升到
v
的最大索引

大概您只打算循环
x
到16。相反,您显然在另一个维度上采用了这种方法


此外,你写了15个,而不是16个,在你的水平版本中,由于某种原因,你一直循环到20。尝试更多地关注你的代码,考虑使用常量而不是“魔法数字”。

你正在访问<代码> v[x+3] ,<代码> v[x+4] < /> >和<代码> v[x+3 ]。在每次迭代中,即使
x
本身直接上升到
v
的最大索引

大概您只打算循环
x
到16。相反,您显然在另一个维度上采用了这种方法


此外,你写了15个,而不是16个,在你的水平版本中,由于某种原因,你一直循环到20。尝试更多地关注你的代码,考虑使用常量而不是“魔法数字”。

你正在访问<代码> v[x+3] ,<代码> v[x+4] < /> >和<代码> v[x+3 ]。在每次迭代中,即使
x
本身直接上升到
v
的最大索引

大概您只打算循环
x
到16。相反,您显然在另一个维度上采用了这种方法


此外,你写了15个,而不是16个,在你的水平版本中,由于某种原因,你一直循环到20个。试着对你的代码多加小心,考虑使用常量而不是“神奇数字”。

这通常是访问无效内存的标志,其“内容”可能随机出现或至少不可预测。作为旁注
y=0;y,这通常是访问无效内存的标志,其“内容”可能随机出现或至少不可预测。作为旁注
y=0;y,这通常是访问无效内存的标志,其“内容”可能是随机的或至少是不可预测的。作为旁注
y=0;y,这通常是访问无效内存的标志,其“内容”可能是随机的或至少是不可预测的。作为旁注
y=0;y得到了答案,谢谢,但“使用常量而不是“幻数”到底是什么意思“?@Quenny得到了答案谢谢,但是你说的‘使用常数而不是‘神奇数字’到底是什么意思?@Quenny得到了答案谢谢,但是你说的‘使用常数而不是‘神奇数字’到底是什么意思?@Quenny得到了答案谢谢,但是你说的‘使用常数而不是‘神奇数字’到底是什么意思?@Quenny”
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;
}