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

如何修复C++中计算矩阵最大正元素前所有正元素之和的错误代码

错误原因分析

你原有求和逻辑的判断条件i <= imax && j < jmax存在逻辑漏洞:
你查找最大元素时是按行优先顺序遍历矩阵(逐行遍历,每行内从左到右),「位于最大元素之前」的判断规则应该是:

  • 行号小于imax的所有元素,本身就比最大元素先遍历到,不管列号多大都符合要求,你现有条件把这部分行里列号≥jmax的正元素全部排除了,直接导致计算结果偏小。

修正方案

只需要调整求和部分的判断逻辑,拆分两种场景处理即可:

//finding maximum
// 注意初始化max为INT_MIN,需要引入<climits>头文件,避免矩阵全为负数时逻辑异常
int max = INT_MIN, imax = 0, jmax = 0;
for (int i = 0; i < n; ++i)
{
    for (int j = 0; j < n; ++j)
    {
        if (arr[i][j] > max)
        {
            max = arr[i][j];
            imax = i;
            jmax = j;
        }
    }
}
//finding a sum
int sum = 0;
// 额外加边界判断:如果最大元素都是负数,说明没有正元素,直接返回0
if (max <= 0) {
    cout << "sum = 0" << endl;
    return 0;
}
for (int i = 0; i < n; ++i)
{
    for (int j = 0; j < n; ++j)
    {
        if (arr[i][j] > 0)
        {
            // 修正后的判断条件
            if (i < imax || (i == imax && j < jmax))
                sum += arr[i][j];
        }
    }
}

cout << "sum = " << sum << endl;

补充说明

如果你的矩阵遍历规则不是行优先(比如列优先),只需要对应调整判断条件的顺序即可,核心逻辑是对齐「找最大元素时的遍历顺序」来定义「之前」的范围。

内容的提问来源于stack exchange,提问作者D. Sutyagin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:36:03