C#矩阵列最值计算代码未覆盖最后一列问题求助
矩阵奇偶列最值计算问题修复
你的代码存在两个关键问题,导致最后一列未被处理且最值计算结果错误:
问题1:循环边界错误
内层循环的终止条件写为j < n,但n是矩阵的行数,而列数是输入中的m。这直接导致当列数m大于行数n时,超出n的列(包括最后一列)完全不会被遍历,自然无法参与最值计算。
问题2:最值判断逻辑错误
你使用else if来判断最大值,这意味着如果当前元素不小于最小值,才会去检查是否大于最大值。但实际上,一个元素可能同时满足“不小于最小值”和“大于最大值”,或者既不满足最小值更新也不满足最大值更新,这里的else if会漏掉很多应该更新最大值的场景。
原问题代码
int min_o = Int32.MaxValue; int max_o = Int32.MinValue; int min_e = Int32.MaxValue; int max_e = Int32.MinValue; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j % 2 != 0) { if (a[i, j] < min_o) min_o = a[i, j]; else if (a[i, j] > max_o) max_o = a[i, j]; } else { if (a[i, j] < min_e) min_e = a[i, j]; else if (a[i, j] > max_e) max_e = a[i, j]; } } }
修复后的代码
int min_o = Int32.MaxValue; int max_o = Int32.MinValue; int min_e = Int32.MaxValue; int max_e = Int32.MinValue; // 外层循环遍历所有行 for (int i = 0; i < n; i++) { // 内层循环改为遍历所有列(用m作为边界) for (int j = 0; j < m; j++) { if (j % 2 != 0) { // 分开判断最小值和最大值,确保每个条件都能独立触发 if (a[i, j] < min_o) min_o = a[i, j]; if (a[i, j] > max_o) max_o = a[i, j]; } else { if (a[i, j] < min_e) min_e = a[i, j]; if (a[i, j] > max_e) max_e = a[i, j]; } } }
测试验证
用你提供的输入示例测试:
n: 3
m: 4
1 2 3 4
5 4 6 7
9 1 7 9
修复后计算结果:
- 奇数列(索引1、3)的元素:2、4、1;4、7、9 → 最小值1,最大值9
- 偶数列(索引0、2)的元素:1、5、9;3、6、7 → 最小值1,最大值9
输出应为:
Minimum for odd columns is: 1, maximum for odd columns is: 9 Minimum for even columns is: 1, maximum for even columns is: 9
内容的提问来源于stack exchange,提问作者Ines Radic
相关产品推荐
相关产品推荐

