Проблема с этими циклами
max_row=0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] > max_row) {
max_row = a[i][j];
b[i] = max_row;
}
}
}
заключается в том, что значение max_row следует инициализировать при каждой итерации внешнего l oop. В противном случае все строки после первой строки имеют дело с максимальным значением предыдущей строки и, как правило, не могут иметь элемент en, который больше текущего значения max_row. Поэтому соответствующий элемент массива b не будет инициализирован.
Также пользователь может ввести для матрицы отрицательные значения, в этом случае ваша программа будет выводить нули вместо максимальных значений.
Найти Максимальное количество элементов в строках и минимальное количество элементов в столбцах достаточно, чтобы иметь одну пару вложенных циклов /
Вот демонстрационная программа /
#include <iostream>
#include <iomanip>
int main()
{
const size_t N = 3;
int a[N][N] =
{
{ 1, 2, 3 },
{ 4, 33, 6 },
{ 7, 8, 9 }
};
int b[N], c[N];
for ( size_t i = 0; i < N; i++ )
{
b[i] = a[i][0];
c[i] = a[0][i];
for ( size_t j = 1; j < N; j++ )
{
if ( b[i] < a[i][j] ) b[i] = a[i][j];
if ( a[j][i] < c[i] ) c[i] = a[j][i];
}
}
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
std::cout << std::setw( 3 ) << a[i][j] << '\t';
}
std::cout << '|' << b[i] << '\n';
}
for ( size_t i = 0; i < N; i++ )
{
std::cout << std::setw( 3 ) << '-' << '\t';
}
std::cout << '\n';
for ( size_t i = 0; i < N; i++ )
{
std::cout << std::setw( 3 ) << c[i] << '\t';
}
std::cout << '\n';
return 0;
}
Ее вывод
1 2 3 |3
4 33 6 |33
7 8 9 |9
- - -
1 2 3