我需要编写一段代码,并附有说明: 编写一个程序来查找矩阵中金额最小的行。如果有多个这样的行,则找到第一个这样的行。 我的代码:
#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 个索引的行时,它会写出第一行
对于初学者来说,像这样的可变长度数组
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;
}
}