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