二维矩阵最大角落元素打印程序bug排查求助
修复C++二维数组最大角落元素程序的3行1列输入错误
问题原因分析
你的程序在处理3行1列矩阵时出错,核心问题有这几点:
- 当
m<=1(即矩阵只有1列)时,你直接将max赋值为topLeft(第一行第一列元素),但此时有效角落元素是第一行第一列和最后一行第一列,你没有比较这两个值的大小,导致最后一行的9被忽略,直接取了第一行的6。 - 嵌套两层循环判断最大值完全多余,这些逻辑只需要执行一次,遍历整个数组纯粹是浪费性能。
- 初始
max=0的设置有隐患,如果所有角落元素都是负数,程序会输出错误的0。
修复方案
直接收集所有有效角落元素,逐个比较找出最大值即可,逻辑更简洁且无漏洞:
- 初始化最大值为第一个角落元素,避免负数场景出错;
- 依次比较右上角、右下角、左下角的元素,更新最大值;
- 即使是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
相关产品推荐
相关产品推荐

