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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:02:06