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

C语言数组行最大值左侧元素替换问题求助

问题分析

你的代码会把所有元素替换成最大值,核心问题是没有区分元素是否在最大值的左侧——第二个循环里只要元素小于最大值就替换,完全忽略了位置要求。另外那个while循环完全没必要,这里用直接赋值就行,因为替换一次就够了。

修正思路

要实现只替换最大值左侧的元素,你需要:

  • 不仅记录每行的最大值,还要记录最大值所在的列索引
  • 只对该列索引之前的元素进行替换操作,最大值本身和右侧元素保持原样
修正后的代码
// 假设R是行数,C是列数,A是目标二维数组
int MAX[R], max_col[R];

// 第一步:遍历每行,找出最大值及其所在列
for(int i = 0; i < R; i++)
{
    MAX[i] = A[i][0]; // 初始化为该行第一个元素,避免数组全为负数时出错
    max_col[i] = 0;
    for(int j = 1; j < C; j++)
    {
        if(A[i][j] > MAX[i])
        {
            MAX[i] = A[i][j];
            max_col[i] = j; // 记录最大值的列位置
        }
    }
}

// 第二步:替换每行最大值左侧的元素
for(int i = 0; i < R; i++)
{
    // 只遍历到最大值所在列的前一列
    for(int j = 0; j < max_col[i]; j++)
    {
        A[i][j] = MAX[i];
    }
}
关键细节说明
  • 初始化最大值时,别直接设为0,改用该行第一个元素,否则如果数组里全是负数,初始的0会比所有元素都大,导致找错最大值。
  • max_col数组用来记录每行最大值的位置,列索引小于max_col[i]的元素就是最大值左侧的目标元素。
  • 第二个循环只遍历到max_col[i]之前,最大值本身和右边的元素不会被修改,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:05:19