我对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;
}
我无法理解为什么输出每次都会改变垂直输出而不是其他输出。
答案 0 :(得分:3)
即使v[x+1]
本身直到v[x+2]
的最大索引,您也会在每次迭代时访问v[x+3]
,x
和v
。
据推测,您只打算将x
循环到16个。相反,您显然已经在另一个方面采用了此方法!
此外,您编写了15而不是16,并且在您的横向版本中,由于某种原因,您一直循环到20。尝试更多地关注你的代码并考虑使用常量而不是#34;魔术数字&#34;。