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

二维矩阵最大角落元素打印程序bug排查求助

修复C++二维数组最大角落元素程序的3行1列输入错误

问题原因分析

你的程序在处理3行1列矩阵时出错,核心问题有这几点:

  • 当m<=1(即矩阵只有1列)时,你直接将max赋值为topLeft(第一行第一列元素),但此时有效角落元素是第一行第一列和最后一行第一列,你没有比较这两个值的大小,导致最后一行的9被忽略,直接取了第一行的6。
  • 嵌套两层循环判断最大值完全多余,这些逻辑只需要执行一次,遍历整个数组纯粹是浪费性能。
  • 初始max=0的设置有隐患,如果所有角落元素都是负数,程序会输出错误的0。

修复方案

直接收集所有有效角落元素,逐个比较找出最大值即可,逻辑更简洁且无漏洞:

  1. 初始化最大值为第一个角落元素,避免负数场景出错;
  2. 依次比较右上角、右下角、左下角的元素,更新最大值;
  3. 即使是1行或1列的矩阵,重复比较同一位置的元素也不会影响结果。

修正后的代码

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
    int n;              
    int m;                
    int a[10][10];       
    
    cin >> n >> m;

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){ 
            cin >> a[i][j];
        }
    }
    
    // 初始化最大值为第一个角落元素
    int max_val = a[0][0];
    
    // 比较右上角元素
    if(a[0][m-1] > max_val){
        max_val = a[0][m-1];
    }
    // 比较右下角元素
    if(a[n-1][m-1] > max_val){
        max_val = a[n-1][m-1];
    }
    // 比较左下角元素
    if(a[n-1][0] > max_val){
        max_val = a[n-1][0];
    }
    
    cout << max_val << endl;
    
    return 0;
}

验证说明

对于3行1列的输入(元素6、8、9),四个角落实际是a[0][0]、a[0][0]、a[2][0]、a[2][0],程序会依次比较后将最大值更新为9,输出正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:05:21