Как найти максимальный элемент каждого столбца матрицы

Перейти к содержанию

Найти максимальные элементы столбцов матрицы

Просмотров 7к. Обновлено 15 октября 2021

Найти максимальный элемент каждого столбца матрицы.

При поиске наибольших элементов в столбцах внешний цикл должен перебирать столбцы, а внутренний — элементы в столбцах. Это значит, что во внутреннем цикле меняется первый индекс элемента, второй остается постоянным в рамках одной итерации внешнего цикла.

В теле внешнего цикла сначала предполагается, что наибольшим является первый элемент текущего столбца. Первый элемент каждого столбца имеет индекс строки, равный 1 (или 0 при индексации с нуля). Второй индекс — это номер столбца, определяется счетчиком внешнего цикла.

Далее в теле внешнего цикла выполняется внутренний цикл, перебирающий элементы текущего столбца, начиная со второго элемента столбца. В теле внутреннего цикла текущий элемент сравнивается с тем, что записан в переменной-максимуме. Если текущий больше, то он присваивается этой переменной.

После завершения внутреннего цикла переменная-максимум будет содержать наибольший элемент столбца, который можно вывести на экран.

Pascal


const N = 15; M = 10;
var
arr: array[1..N,1..M] of byte;
i,j,max: byte;
begin
randomize;
for i:=1 to N do begin
for j:=1 to M do begin
arr[i,j] := random(256);
write(' |',arr[i,j]:3,'| ');
end;
writeln;
end;
for i:=1 to M do
write(' ----- ');
writeln;
for j:=1 to M do begin
max := arr[1,j];
for i:=2 to N do
if arr[i,j] > max then
max := arr[i,j];
write(' ',max:3,' ');
end;
writeln;
end.



Пример(ы) выполнения программы на языке Pascal:

| 75| |230| | 21| | 95| |219| |102| | 64| |125| | 8| |132|
|190| | 73| |127| | 85| |110| |188| | 45| |108| |104| |233|
| 85| |160| | 47| |158| | 32| | 75| | 59| |149| |175| |226|
|179| |208| |239| |238| |120| | 83| |120| |135| |252| | 19|
| 33| |217| |247| | 82| | 0| |125| |190| | 53| | 87| |186|
|239| | 48| | 29| | 35| |210| | 96| | 46| | 17| |106| |225|
|232| | 1| |201| | 1| | 54| |249| | 46| |179| |122| | 58|
| 66| |190| |161| | 84| | 88| | 33| |201| | 64| | 43| | 7|
|206| |114| |196| | 4| |137| |165| | 63| |144| |183| |121|
|151| | 9| |161| |120| |197| |228| | 20| |121| |176| |217|
|109| | 19| |188| |105| |114| |230| |217| |172| |194| |127|
|138| |222| |116| |132| | 92| |105| |222| | 73| | 94| | 16|
| 30| |127| |125| | 54| |134| |240| | 75| |227| |215| | 38|
| 87| | 64| |167| |191| |212| |157| | 62| |231| |166| |177|
|184| |179| |201| | 19| |242| |185| | 31| |226| |101| |123|
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
239 230 247 238 242 249 222 231 252 233

Язык Си


#include < stdio.h>
#define N 15
#define M 10
main() {
int arr[N][M], i, j, max;
srand(time(NULL));
for (i=0; i< N; i++) {
for (j=0; j< M; j++) {
arr[i][j] = rand() % 256;
printf(" |%3d| ", arr[i][j]);
}
printf("n");
}
for (j=0; j< M; j++)
printf(" ----- ");
printf("n");
for (j=0; j< M; j++) {
max = arr[0][j];
for (i=1; i< N; i++)
if (arr[i][j] > max)
max = arr[i][j];
printf(" %3d ", max);
}
printf("n");
}

Python

найти максимальный элемент столбца матрицы Python


from random import random
N = 15
M = 10
arr = []
for i in range(N):
lst = []
for j in range(M):
lst.append(int(random() * 256))
arr.append(lst)
for i in range(N):
for j in range(M):
print(" |%3d| " % arr[i][j], end='')
print()
for i in range(M):
print(" ----- ", end='')
print()
for j in range(M):
mx = arr[0][j]
for i in range(N):
if arr[i][j] > mx:
mx = arr[i][j]
print(" |%3d| " % mx, end='')
print()

КуМир


алг
нач
цел N = 15, M = 10
целтаб t[1:N,1:M]
цел mx, i, j
нц для i от 1 до N
нц для j от 1 до M
t[i,j] := irnd(256)
вывод " |",t[i,j]:3,"| "
кц
вывод нс
кц
нц для i от 1 до M
вывод " ----- "
кц
вывод нс
нц для j от 1 до M
mx := t[1, j]
нц для i от 2 до N
если t[i,j] > mx то
mx := t[i,j]
все
кц
вывод ' ',mx:3,' '
кц
кон

Basic-256


N = 15
M = 10
dim arr(N,M)
for i=0 to N-1
for j=0 to M-1
arr[i,j] = int(rand*90)+10
print arr[i,j] + " ";
next j
print
next i
for j=0 to M-1
print "-----";
next j
print
for j=0 to M-1
max = arr[0,j]
for i=1 to N-1
if arr[i,j] > max then max = arr[i,j]
next i
print max + " ";
next j
print

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a matrix, the task is to find the maximum element of each column.

    Examples: 

    Input:  [1, 2, 3]
            [1, 4, 9]
            [76, 34, 21]
    Output:
    76
    34
    21
    
    Input: [1, 2, 3, 21]
           [12, 1, 65, 9]
            1, 56, 34, 2]
    Output:
    12
    56
    65
    21

    Approach: The idea is to run the loop for no_of_cols. Check each element inside the column and find the maximum element. Finally, print the element. 

     Below is the implementation of the above approach: 

    C++

    #include <bits/stdc++.h>

    using namespace std;

    const int MAX = 100;

    void largestInColumn(int mat[][MAX], int rows, int cols)

    {

        for (int i = 0; i < cols; i++) {

            int maxm = mat[0][i];

            for (int j = 1; j < rows; j++) {

                if (mat[j][i] > maxm)

                    maxm = mat[j][i];

            }

            cout << maxm << endl;

        }

    }

    int main()

    {

        int n = 4, m = 4;

        int mat[][MAX] = { { 3, 4, 1, 8 },

                           { 1, 4, 9, 11 },

                           { 76, 34, 21, 1 },

                           { 2, 1, 4, 5 } };

        largestInColumn(mat, n, m);

        return 0;

    }

    C

    #include <stdio.h>

    #define MAX 100

    void largestInColumn(int mat[][MAX], int rows, int cols)

    {

        for (int i = 0; i < cols; i++) {

            int maxm = mat[0][i];

            for (int j = 1; j < rows; j++) {

                if (mat[j][i] > maxm)

                    maxm = mat[j][i];

            }

            printf("%dn",maxm);

        }

    }

    int main()

    {

        int n = 4, m = 4;

        int mat[][MAX] = { { 3, 4, 1, 8 },

                           { 1, 4, 9, 11 },

                           { 76, 34, 21, 1 },

                           { 2, 1, 4, 5 } };

        largestInColumn(mat, n, m);

        return 0;

    }

    Java

    public class GFG {

        public static void largestInColumn(int cols, int[][] arr)

        {

            for (int i = 0; i < cols; i++) {

                int maxm = arr[0][i];

                for (int j = 1; j < arr[i].length; j++)

                    if (arr[j][i] > maxm)

                        maxm = arr[j][i];

                System.out.println(maxm);

            }

        }

        public static void main(String[] args)

        {

            int[][] arr = new int[][] { { 3, 4, 1, 8 },

                                        { 1, 4, 9, 11 },

                                        { 76, 34, 21, 1 },

                                        { 2, 1, 4, 5 } };

            largestInColumn(4, arr);

        }

    }

    Python3

    MAX = 100

    def largestInColumn(mat, rows, cols):

        for i in range(cols):

            maxm = mat[0][i]

            for j in range(rows):

                if mat[j][i] > maxm:

                    maxm = mat[j][i]

            print(maxm)

    n, m = 4, 4

    mat = [[3, 4, 1, 8],

           [1, 4, 9, 11],

           [76, 34, 21, 1],

           [2, 1, 4, 5]]

    largestInColumn(mat, n, m);

    C#

    using System;

    class GFG

    {

    public static void largestInColumn(int cols,

                                       int[, ] arr)

    {

        for (int i = 0; i < cols; i++)

        {

            int maxm = arr[0, i];

            for (int j = 1; j < arr.GetLength(0); j++)

                if (arr[j, i] > maxm)

                    maxm = arr[j, i];

            Console.WriteLine(maxm);

        }

    }

    public static void Main()

    {

        int[, ] arr = new int[, ] { { 3, 4, 1, 8 },

                                    { 1, 4, 9, 11 },

                                    { 76, 34, 21, 1 },

                                    { 2, 1, 4, 5 } };

        largestInColumn(4, arr);

    }

    }

    PHP

    <?php

    $MAX = 100;

    function largestInColumn($mat, $rows, $cols)

    {

        for ($i = 0; $i < $cols; $i++)

        {

            $maxm = $mat[0][$i];

            for ($j = 1; $j < $rows; $j++)

            {

                if ($mat[$j][$i] > $maxm)

                    $maxm = $mat[$j][$i];

            }

            echo $maxm, "n";

        }

    }

    $n = 4;

    $m = 4;

    $mat = array(array( 3, 4, 1, 8 ),

                 array( 1, 4, 9, 11 ),

                 array( 76, 34, 21, 1 ),

                 array( 2, 1, 4, 5 ));

    largestInColumn($mat, $n, $m);

    ?>

    Javascript

    <script>

        function largestInColumn(cols,arr)

        {

            for (let i = 0; i < cols; i++)

            {

                let maxm = arr[0][i];

                for (let j = 1; j < arr[i].length; j++)

                    if (arr[j][i] > maxm)

                        maxm = arr[j][i];

                document.write(maxm+"<br>");

            }

        }

        let arr = [[ 3, 4, 1, 8 ],

                   [ 1, 4, 9, 11 ],

                   [ 76, 34, 21, 1 ],

                   [ 2, 1, 4, 5 ]];

            largestInColumn(4, arr);

    </script>

    Time Complexity: O(n * m), Here n is No. of Rows and m is No. of Column.
    Auxiliary Space: O(1)

    Last Updated :
    15 Sep, 2022

    Like Article

    Save Article

    coal chamber

    0 / 0 / 0

    Регистрация: 12.03.2018

    Сообщений: 32

    1

    В каждом столбце матрицы найти максимальные элементы

    25.04.2018, 18:53. Показов 6090. Ответов 4

    Метки нет (Все метки)


    Студворк — интернет-сервис помощи студентам

    Можете помочь. Как сделать чтобы после матрицы отображались макcимальные элементы из столбцов? Что добавить?

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    #include <iostream>
    using namespace std;
    int main()
    {
    setlocale (LC_ALL, "RUS");
    int i,j,N,M,a[20][20];
    cout<<"Введите количество строк ="; //ввод количества строк
    cin>>N;
    cout<<"Введите количество столбцов ="; //ввод количества столбцов
    cin>>M;
    cout<<"Введите элементы матрицы n";
    //цикл по переменной i, в которой перебираем строки матрицы
    for (i=0; i<N; i++)
    //цикл по переменной j, в котором перебираем элементы внутри строки
    for (j=0; j<M; j++)
    cin>>a[i][j]; //ввод очередного элемента матрицы
    cout<<"matrix A n";
    for (i=0; i<N; i++)
    {
    //цикл по переменной i, в котором перебираем строки матрицы
    for (j=0; j<M; j++)
    cout<<a[i][j]<<"t"; //вывод очередного элемента матрицы
    cout<<endl; //переход на новую строку после вывода всех элементов строки
    }
     
    return 0;
    }



    0



    k0vpack

    82 / 78 / 34

    Регистрация: 13.02.2018

    Сообщений: 1,347

    25.04.2018, 21:21

    2

    coal chamber, объясню, думаю сам догадаешься, создай массив (только в данном случае) переменных int max[20] (как у тебя видно), после прохождение каждого столбца матрицы определяй максимальный элемент, вот так:

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    int max[20];
    for(int i = 0; i < M; i++)
    max[i] = a[0][i];
    for(int i = 1; i < N;  i++)
    {
        for(int j = 1; j < M; j++)
    {
         if(a[i][j] > max) max = a[i][j];
    }
    }

    писал без компилятора, так что возможно ошибся где-то, но суть ты должен был понять, после этого всегда в массиве max остались максимальные элементы каждого столбца по номеру



    0



    Yetty

    7427 / 5021 / 2891

    Регистрация: 18.12.2017

    Сообщений: 15,694

    26.04.2018, 01:09

    3

    Цитата
    Сообщение от k0vpack
    Посмотреть сообщение

    создай массив … переменных int max[20

    не стоит создавать массив там где это не нужно

    coal chamber,

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    #include <iostream>
    #include <ctime>
    using namespace std;
     
    int main()
    {
        srand((int)time(0));
        int N, M, max=0;
        cout <<"N="; cin >>N;
        cout <<"M="; cin >>M;
        
          int **a = new int*[N]; 
        for (int i = 0; i < N; i++)
          a[i]=new int[M];
        
        for (int i = 0; i < N; i++)
        {
        for (int j = 0; j < M; j++)
        {
        a[i][j]=rand()%9 + 1;
        cout <<a[i][j]<<" ";
        }
        cout << endl;
        }
        cout << endl;
        
        for (int j = 0; j < M; j++)
        {
        for (int i = 0; i < N; i++) 
        if (i==0 || a[i][j]>max) max=a[i][j];
        cout <<max<<" ";
        }
        cout << endl;
        
     
        for (int i = 0; i < N; i++)
        delete [] a[i];
        delete [] a;
     
    system("pause");
    return 0;
    }



    0



    82 / 78 / 34

    Регистрация: 13.02.2018

    Сообщений: 1,347

    26.04.2018, 18:27

    4

    Yetty,

    Цитата
    Сообщение от Yetty
    Посмотреть сообщение

    cout <<max<<» «;

    я понимаю что задача была

    Цитата
    Сообщение от coal chamber
    Посмотреть сообщение

    отображались

    но для дальнейшей работы непосредственно с максимальными элементами нужно будет массив, что бы в следующий раз, не было вопросов у кого-то, как потом с этим работать.

    Не по теме:

    да ладно, я не дочитал что нужно просто вывести



    0



    coal chamber

    0 / 0 / 0

    Регистрация: 12.03.2018

    Сообщений: 32

    26.04.2018, 20:08

     [ТС]

    5

    а что теперь добавить , чтобы из каждого полученного максимального значения вычесть каждое число из соответствующего столбца и отобразить это в виде матрицы?

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    #include <iostream>
    using namespace std;
    int main()
    {
    setlocale (LC_ALL, "RUS");
    int i,j,N,M,a[20][20],max=0;
    cout<<"Введите количество строк ="; //ввод количества строк
    cin>>N;
    cout<<"Введите количество столбцов ="; //ввод количества столбцов
    cin>>M;
    cout<<"Введите элементы матрицы n";
    //цикл по переменной i, в которой перебираем строки матрицы
    for (i=0; i<N; i++)
    //цикл по переменной j, в котором перебираем элементы внутри строки
    for (j=0; j<M; j++)
    cin>>a[i][j]; //ввод очередного элемента матрицы
    cout<<"Матрица n";
    for (i=0; i<N; i++)
    {
    //цикл по переменной i, в котором перебираем строки матрицы
    for (j=0; j<M; j++)
    cout<<a[i][j]<<"t"; //вывод очередного элемента матрицы
    cout<<endl; //переход на новую строку после вывода всех элементов строки
    }
    cout<<"максимальные элементы столбцов "; //ввод количества строк
     for (int j = 0; j < M; j++)
        {
        for (int i = 0; i < N; i++) 
        if (i==0 || a[i][j]>max) max=a[i][j];
        cout <<max<<" ";
        }
        cout << endl;
      cout<<"Вычитаем из максимальных элементов столбцов значения элементов матрицыnПолучаем матрицу рисков R=n "; 
    return 0;
    }



    0



        #include <iostream>
    using namespace std;
    
    int main()
    {
        const int ROWS = 5;
        const int COLS = 5;
    
        float array[ROWS][COLS];
    
        int count = 0;
    
        for (int i = 0; i < ROWS; i++)
        {
            for (int j = 0; j < COLS; j++)
            {
                cout << (array[i][j] = rand() % 10) << "t";
            }
            cout << endl;
        }
    
        /*for (int i = 0; i < ROWS; i++)
        {
            for (int j = 0; j < COLS; j++)
            {
                if (array[j][i] == 0)
                    count++;
            }
        }*/
    
        int tempmax = array[0][0];
        for (int i = 0; i < ROWS; i++)
        {
            for (int j = 0; j < COLS; j++)
            {
                if (array[j][i] > tempmax)
                {
                    tempmax = array[j][i];
                }
            }
        }
        
        cout << tempmax;
    

    задан 4 мая 2022 в 11:11

    Max Kapko's user avatar

    2

    for (int j = 0; j < COLS; j++)
    {
        int tempmax = array[0][j];
        for (int i = 1; i < ROWS; i++)
            if (array[i][j] > tempmax)
                tempmax = array[i][j];
        cout << tempmax;
    }
    

    «Вот так как-то» (с)

    ответ дан 4 мая 2022 в 11:36

    Harry's user avatar

    HarryHarry

    214k15 золотых знаков117 серебряных знаков229 бронзовых знаков

    2

    Раз нужно найти максимум в столбце, то и внешний цикл делайте по столбцам, в начале цикла задавая временный максимум

    ответ дан 4 мая 2022 в 11:19

    MBo's user avatar

    MBoMBo

    47.8k1 золотой знак17 серебряных знаков40 бронзовых знаков

    1

    Как написал @MBo сначала цикл по столбцам

    int tempmax[COLS]; // максимальных значений столько, сколько столбцов
    for (int j = 0; j < COLS; j++) // сначала цикл по столбцам
    {
      tempmax[j] = array[0][j]; // первоначальное значение == первому элементу
      for (int i = 1; i < ROWS; i++)  // внутри - цикл по строкам      
      {
         if (array[i][j] > tempmax[j])
         {
            tempmax[j] = array[i][j];
         }
      }
    }
    

    ответ дан 4 мая 2022 в 11:46

    DmitryK's user avatar

    DmitryKDmitryK

    4,4961 золотой знак5 серебряных знаков19 бронзовых знаков

    1

    program maxelst;
    var a,b:array[1..100,1..100] of integer;
    i,j,n,m,max:integer;
    begin
    Writeln('Vvedite N and M');readln(n,m);
    for i:=1 to n do
    for j:=1 to n do
    a[i,j]:=random(50);
    for i:=1 to m do
    for j:=1 to m do
    b[i,j]:=random(50);
    writeln('Isxodnya matrica 1');
    for i:=1 to n do begin
    for j:=1 to n do
    write(a[i,j],' ');
    writeln;
    end;
    for j:=1 to n do
     begin
     max:=0;
     for i:=1 to n do
     if a[i,j]>max then max:=a[i,j];
     writeln('Max v stolbce ',j,'=',max);
     end;
    writeln('Isxodnya matrica 2');
    for i:=1 to n do begin
    for j:=1 to n do
    write(a[i,j],' ');
    writeln;
    end;
    for j:=1 to n do
     begin
     max:=0;
     for i:=1 to m do
     if a[i,j]>max then max:=a[i,j];
     writeln('Max v stolbce ',j,'=',max);
     end;
    end.

    Понравилась статья? Поделить с друзьями:
  • Как найти цену сережек
  • Меню яндекса устройство как найти
  • Как найти ретро автомобили
  • Как найти файлы виртуальной машины
  • Как найти косинус угла зная его синус