我正在尝试计算 20x20 网格中四个相邻数字(整数)之间的最大乘积。
这就是我到目前为止所拥有的......
/**
* The maxProduct method is used to compute the largest product across four
* consecutive integers (either horizontally, vertically, or diagonally).
*
* @param gridData - A 20x20 array containing the integer values.
* @return maxProduct - The largest product.
*/
private static int maxProduct(int[][] gridData)
{
int maxProduct = 0;
int currentProduct = 0;
// Compute the products across the columns.
for (int row = 0; row < 20; row++)
for (int column = 0; column < 17; column++)
{
currentProduct = gridData[row][column]
* gridData[row][column + 1] * gridData[row][column + 2]
* gridData[row][column + 3];
if (currentProduct > maxProduct)
{
maxProduct = currentProduct;
}
}
// Compute the products across the rows.
for (int column = 0; column < 20; column++)
for (int row = 0; row < 17; row++)
{
currentProduct = gridData[row][column]
* gridData[row + 1][column] * gridData[row + 2][column]
* gridData[row + 3][column];
if (currentProduct > maxProduct)
{
maxProduct = currentProduct;
}
}
// Compute the products across the right diagonals.
for (int column = 0; column < 17; column++)
for (int row = 0; row < 17; row++)
{
currentProduct = gridData[row][column]
* gridData[row + 1][column + 1]
* gridData[row + 2][column + 2]
* gridData[row + 3][column + 3];
if (currentProduct > maxProduct)
{
maxProduct = currentProduct;
}
}
// Compute the products across the left diagonals.
for (int column = 19; column < 3; column--)
for (int row = 0; row < 17; row++)
{
currentProduct = gridData[row][column]
* gridData[row + 1][column - 1]
* gridData[row + 2][column - 2]
* gridData[row + 3][column - 3];
if (currentProduct > maxProduct)
{
maxProduct = currentProduct;
}
}
return maxProduct;
}
我从我的另一个项目复制了这段代码(它恰好是一款使用 8x8 网格的 Connect 4 游戏)。显然我的 Connect 4 游戏代码不起作用。我的左对角线未能通过测试用例,我确信我已经通过此方法解决了问题。
功能应该是相同的(就计算乘积而言),但我没有找到正确的值。
我的逻辑哪里错了?
最佳答案
我看到的问题是这一行:
for (int column = 19; column < 3; column--)
这将是 false
开始,并且该 block 永远不会执行。您可能需要
for (int column = 19; column >= 3; column--)
使用 >=
使 column
的最后一个有效值为 3(因此 column - 3
的计算结果为 0
然后你到达左侧)。
关于java - 多维数组计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16599361/