在矩阵C ++中查找每一列和每一行的最小和最大元素

时间:2020-02-16 20:06:02

标签: c++ arrays for-loop max nested-loops

我正在尝试执行以下操作: 有一个矩阵,将整个内容打印出来,在每行的末尾打印该行的最大元素,并在每列的底部打印该列的最小元素。 我几乎是C ++的初学者。

所以这是我到目前为止所做的:

 #include <iostream>
    #include <iomanip>
    #define M 50
    #define N 50
    using namespace std;
    int main()
    {
        int m,n;        
        int a[M][N];
        int b[M],c[N];

        do {        
        cout<<"m=";
        cin>>m;
        cout<<endl<<"n=";
        cin>>n;
        cout<<endl;
        }
        while(m!=n);

        for(int i=0;i<m; i++) {
            for(int j=0; j<n; j++){
            cout<<"a["<<i<<"]["<<j<<"]=";
            cin>>a[i][j];
            }
        }
        int max_row;
        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;
                }
            }
        }

        for (int i=0; i<m; i++)
        { for(int j=0; j<n; j++){
            cout<<setw(3)<<a[i][j]<<"\t";
        }
        cout<<"|"<<b[i];
        cout<<endl;
        }
        for(int i=0; i<m; i++){
        cout<<setw(3)<<"-";}

        cout<<endl;

        for(int j=0; j<n; j++)
        {cout<<c[j]<<"\t";
        }

        system("pause");
    }

在大多数情况下,max_row是正确的,例如这种情况:

  3       2       1     |3
  4       6       5     |6
  7       8       9     |9

其他时候,他们会陷入困境,就像这样:

  1       2       3     |3
  4      33       6     |33
  7       8       9     |-858993460

我真的不知道是什么原因造成的,并且由于没有错误消息,我感到非常困惑。另外我也不知道如何使min列最小。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这些循环的问题

import re                                                               

def count_32(number): 
    if not isinstance(number, str): 
        number = str(number) 
    return len(re.findall('32', number)) 

是max_row的值应在外循环的每次迭代中初始化。否则,第一行之后的所有行都将处理前一行的最大值,并且通常不能使en元素大于max_row的当前值。因此,数组b的对应元素将不会初始化。

用户也可以输入矩阵负值,在这种情况下,您的程序将输出零而不是最大值。

要查找行中的最大元素和列中的最小元素,只要有一对嵌套循环/

这是一个演示程序/

    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;
            }
        }
    }

其输出为

#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;
}