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

方阵中排除对角线元素求和的代码错误排查

问题分析与修复

你的代码存在两个核心问题:对角线判断逻辑错误,以及循环内的元素跳过逻辑错误,导致计算结果不符合预期。

1. 对角线判断函数完全错误

你写的isRightDiagonal和isLeftDiagonal函数里,犯了两个低级错误:

  • 误用赋值运算符=代替相等判断==,这会直接修改变量值,而非进行条件判断
  • 对角线的判断公式完全错误:
    • 左上到右下的主对角线:正确条件是row == col(行号等于列号)
    • 左下到右上的副对角线:正确条件是row + col == size - 1(行号加列号等于矩阵边长减1)

2. 循环内的跳过逻辑错误

当判断到元素在对角线上时,你执行col++后依然执行count += mat[row][col],这会导致:

  • 没有跳过当前对角线元素,反而错误累加了下一个元素
  • 如果col已经是最后一列(size-1),col++会触发数组越界,引发未定义行为

正确的做法是用continue直接跳过当前循环,不执行累加操作。


修正后的代码

#include <stdbool.h> // 需包含此头文件以使用bool类型

bool isRightDiagonal(int size, int row, int col)
{
    return row == col; // 主对角线判断:行号等于列号
}

bool isLeftDiagonal(int size, int row, int col)
{
    return row + col == size - 1; // 副对角线判断:行号+列号=边长-1
}

int calculateVal(int **mat, int size)
{
    int count = 0;
    for (int row = 0; row < size; row++)
    {
        for (int col = 0; col < size; col++)
        {
            if (isRightDiagonal(size, row, col) || isLeftDiagonal(size, row, col))
            {
                continue; // 跳过对角线元素,直接进入下一次循环
            }
            count += mat[row][col];
        }
    }
    return count;
}

验证结果

对于5x5全1的矩阵:

  • 总元素数25,两条对角线共有5+5-1=9个元素(中间元素重复)
  • 25-9=16,与预期结果一致
  • 全2的矩阵会得到16*2=32,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:22:15