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

矩阵求最小元素和行代码错误:输出首行而非正确行的排查与修复

矩阵最小和行查找代码问题分析与修复

问题描述

需要编写程序找出矩阵中元素和最小的行,若存在多个则返回第一个。但现有代码输入给定测试用例时,输出首行(1 3 2 54 234),正确结果应为索引为2的行(13 26 56 9 12)。

原代码

#include <iostream>
using namespace std;
int main() {
    int n, m, h;
    int arr[100][100];
    cin >> n >> m;
    const int q = m;
    int ar[q];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> arr[i][j];
        }
    }
    for (int i = 0; i<n; i++){
        int sum = 0;
        for (int j = 0; j<m; j++){
            sum += arr[i][j];
        }
        for (int y=0; y<q; y++){
            ar[y] = sum;
        }
    }
    int sammin = ar[0];
    for (int i = 0; i<q; i++){
        if (ar[i] < sammin){
            h = i;
        }
    }
    for (int j = 0; j<m;j++){
        cout << arr[h][j] << " ";
    }
    return 0;
}

测试输入

4 5
1 3 2 54 234
75 12 3 46 9
13 26 56 9 12
14 90 897 6 34

错误分析

  1. 行和存储数组维度错误:需要存储n行的和,但用列数m定义了数组ar的大小,当行数和列数不等时,直接导致存储逻辑混乱。
  2. 行和覆盖错误:计算完第i行的和后,用循环将ar的所有元素都赋值为当前行的和,最终ar中只会保留最后一行的和,完全丢失了前面所有行的和数据。
  3. 索引变量未初始化:h用来记录最小和行的索引,但未赋予初始值,当没有触发更新h的条件时,h的取值是未定义的,可能导致输出随机行。
  4. 最小和查找范围错误:循环遍历的是列数范围(0到m-1),但实际应该遍历行数范围(0到n-1),因为要比较的是所有行的和。

修复后的代码

#include <iostream>
using namespace std;
int main() {
    int n, m, h = 0; // 初始化h为0,默认首行是最小和行
    int arr[100][100];
    cin >> n >> m;
    int ar[n]; // 数组大小改为n,存储n行的和
    // 读取矩阵
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> arr[i][j];
        }
    }
    // 计算每行的和并存储
    for (int i = 0; i < n; i++){
        int sum = 0;
        for (int j = 0; j < m; j++){
            sum += arr[i][j];
        }
        ar[i] = sum; // 直接将当前行的和存入对应位置,无需循环覆盖
    }
    // 寻找最小和的行索引
    int sammin = ar[0];
    for (int i = 1; i < n; i++){ // 从第1行开始比较,避免重复比较首行
        if (ar[i] < sammin){
            sammin = ar[i];
            h = i;
        }
        // 相等时不更新h,保证返回第一个出现的最小和行
    }
    // 输出结果行
    for (int j = 0; j < m; j++){
        cout << arr[h][j] << " ";
    }
    return 0;
}

说明

修复后的代码做了以下关键调整:

  • 将存储行和的数组ar大小改为n,匹配行数需求。
  • 直接将每行的和存入ar对应索引位置,不再覆盖所有元素。
  • 初始化h为0,确保初始状态正确。
  • 遍历行数范围查找最小和,且仅当当前行和小于当前最小值时才更新索引,保证第一个出现的最小和行被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:14:53