You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:20×20矩阵中4个连续数的最大乘积求解出错

嘿,我来帮你搞定这个20×20矩阵找最大四连数乘积的问题!结合你提到的情况,咱们先梳理清楚问题核心,再排查常见坑,最后给你靠谱的实现参考~

问题核心确认

首先得确保你已经覆盖了所有要求的连续方向:

  • 水平向右:同一行内连续4个元素
  • 垂直向下:同一列内连续4个元素
  • 对角线右下:从左上到右下的连续4个元素
  • 对角线左下:从右上到左下的连续4个元素
常见错误点排查

你说已经修正了一处错误,那不妨再检查以下几个大家常踩的坑:

  • 方向遗漏:很容易漏掉左下对角线的情况,或者边界处理错误导致数组越界(比如循环时没控制好行/列的范围,取到了矩阵外的元素)
  • 初始值设置错误:如果把最大乘积初始设为0,当矩阵中存在四个负数相乘的正乘积时,就会被忽略,正确的初始值应该设为语言支持的最小整数(比如PHP里的PHP_INT_MIN)
  • 索引混淆:比如把行和列的索引搞反,或者计算连续元素时索引步长错误(比如多取/少取了元素)
参考实现(PHP版,匹配你的数据格式)

这里给出完整的可运行代码,你可以对照自己的代码排查差异:

// 示例矩阵数据(你可以替换成完整的20×20数据)
$data = [
    [89,32,92,64,81,2,20,33,44,1,70,75,39,62,76,35,16,77,22,55],
    [12,45,78,90,23,56,89,10,34,67,91,24,57,80,13,46,79,92,25,58],
    // 补充剩余18行数据...
];

$maxProduct = PHP_INT_MIN; // 初始化为最小整数,兼容负数乘积场景
$matrixSize = 20;
$sequenceCount = 4;

// 1. 检查水平向右方向
for ($row = 0; $row < $matrixSize; $row++) {
    for ($col = 0; $col <= $matrixSize - $sequenceCount; $col++) {
        $product = $data[$row][$col] * $data[$row][$col+1] * $data[$row][$col+2] * $data[$row][$col+3];
        if ($product > $maxProduct) {
            $maxProduct = $product;
        }
    }
}

// 2. 检查垂直向下方向
for ($row = 0; $row <= $matrixSize - $sequenceCount; $row++) {
    for ($col = 0; $col < $matrixSize; $col++) {
        $product = $data[$row][$col] * $data[$row+1][$col] * $data[$row+2][$col] * $data[$row+3][$col];
        if ($product > $maxProduct) {
            $maxProduct = $product;
        }
    }
}

// 3. 检查对角线右下方向(左上→右下)
for ($row = 0; $row <= $matrixSize - $sequenceCount; $row++) {
    for ($col = 0; $col <= $matrixSize - $sequenceCount; $col++) {
        $product = $data[$row][$col] * $data[$row+1][$col+1] * $data[$row+2][$col+2] * $data[$row+3][$col+3];
        if ($product > $maxProduct) {
            $maxProduct = $product;
        }
    }
}

// 4. 检查对角线左下方向(右上→左下)
for ($row = 0; $row <= $matrixSize - $sequenceCount; $row++) {
    for ($col = $sequenceCount - 1; $col < $matrixSize; $col++) {
        $product = $data[$row][$col] * $data[$row+1][$col-1] * $data[$row+2][$col-2] * $data[$row+3][$col-3];
        if ($product > $maxProduct) {
            $maxProduct = $product;
        }
    }
}

echo "最大四连数乘积为: " . $maxProduct;
代码关键点说明
  • 初始值用PHP_INT_MIN:确保即使所有乘积都是负数,也能正确找到最大的那个值
  • 严格控制循环边界:比如水平方向的列索引最多到16(因为16+3=19,是矩阵最后一列的索引),避免数组越界
  • 完整覆盖四个方向:没有遗漏任何要求的连续方向

如果对照后还是找不到问题,你可以把你的代码贴出来,咱们再具体分析细节~

内容的提问来源于stack exchange,提问作者zedling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:52:22