在处理矩阵时,c++代码在每一行中查找时,不会写出最小量的行,而只是写出第一行

问题描述 投票:0回答:1

我需要编写一段代码,并附有说明: 编写一个程序来查找矩阵中金额最小的行。如果有多个这样的行,则找到第一个这样的行。 我的代码:

#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

当代码应该输出具有 2 个索引的行时,它会写出第一行

c++
1个回答
0
投票

对于初学者来说,像这样的可变长度数组

const int q=m;
int ar[q];

不是标准 C++ 功能。相反,您应该使用标准容器

std::vector<int>

你的矩阵有

n
行。所以数组
ar
必须有
n
元素而不是
m

这个内部 for 循环

for (int y=0; y<q; y++){
    ar[y] = sum;
}

在外循环的每次迭代中用相同的值填充数组的所有元素。您需要编写而不是内部 for 循环

arr[i] = sum;

由于内部循环的数组包含等于矩阵最后一行元素之和的所有元素,并且总和最大,因此变量 h 在此循环内不会改变

int sammin = ar[0];
for (int i = 0; i<q; i++){
    if (ar[i] < sammin){
        h = i;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.