当试图为项目euler 11找到数组中最大的产品时,得到了尴尬的结果
Getting awkward results when trying to find largest product in array for project euler 11
我被要求在项目euler问题11的20x20网格中,水平、对角或垂直地找到4个相邻数字的最大乘积。网格可在此处找到:http://projecteuler.net/problem=11.
我找不到比在整个阵列上循环4次更有效的方法了。我制作了一个变量max,最初设置为0。然后,我水平地在数组上循环,找到了产品。如果一个乘积大于max,则将max设置为该乘积,等等。我对所有4个循环都这样做了。然而,我的答案是错误的,而且可能太大了。
#include <iostream>
using namespace std;
int main () {
int twenty_grid[20][20] =
{
{ 8, 2, 22, /* data elided since the question links to it */ },
…
}
int max = 0;
// Pass 1: This determines the greatest element horizontally
for (int i = 0; i < 20; ++i) {
for (int j = 0; j < 17; ++j) {
// j stops at 17 to avoid a segmentation fault.
int n = twenty_grid[i][j] *
twenty_grid[i][j+1] *
twenty_grid[i][j+2] *
twenty_grid[i][j+2] *
twenty_grid[i][j+3];
if (n > max)
max = n;
}
}
// Now we do the same loop, except we do i + 1, i + 2, etc,
// rather than j +1, j+2. This does it vertically. Pass 2:
for (int i = 0; i < 17; ++i) {
for (int j = 0; j < 20; ++j) {
int n = twenty_grid[i][j] *
twenty_grid[i+1][j] *
twenty_grid[i+2][j] *
twenty_grid[i+3][j];
if (n > max) {
max = n;
}
}
}
// Finally, we increment both i and j to get the diagonals.
for (int i = 0; i < 17; ++i) {
for (int j = 0; j < 20; ++j) {
int n = twenty_grid[i][j] *
twenty_grid[i+1][j+1] *
twenty_grid[i+2][j+2] *
twenty_grid[i+3][j+3];
if (n > max) {
max = n;
}
}
}
// For diagonals, 2 passes are needed to account for both directions.
for (int i = 0; i < 17; i++) {
for (int j = 3; j < 20; j++) {
int n = twenty_grid[i][j] *
twenty_grid[i + 1][i -1] *
twenty_grid[i + 2][i -2] *
twenty_grid[i + 3][i -3];
if (n > max)
max = n;
}
}
cout << max << endl;
return 0;
}
为了了解为什么我的答案总是错误的,我开始打印出每一个单独的产品。令我惊讶的是,其中许多都是负面的。在检查了我的循环之后,它们似乎不会访问数组中的任何数据。有人能指引我修复这个代码的正确方向吗?
我发现了几个问题。
- 第一个代码块将
twenty_grid[i][j+2]
相乘两次 - 在代码的第三块中,内部循环的结束条件应该是
j < 17
- 最后一块代码在三个位置使用
i
而不是j
作为数组索引
它会在解决这些问题后得出正确的答案。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- valgrind-hellgrind与泄漏检查的结果不同
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- 用C++20 fmt限制结果的总大小
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 相同的代码,不同的结果?从其他项目包含有什么问题?
- 单位测试多个C 项目和团队的出口结果
- 欧拉#11项目每次运行时都会产生不同的结果
- 如何在使用单个测试项目时将所有QtTestLib单元测试的结果组合在一个文件中?
- 无法重现项目示例项目中的内存清理结果
- 基类的指针数组;每次项目启动我都有不同的结果
- 当试图为项目euler 11找到数组中最大的产品时,得到了尴尬的结果
- 错误的结果在一个项目euler 31
- 提振.测试-从同一项目的不同构建配置中区分测试结果