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

Задача

В двумерном массиве (матрице) найти индексы (номера строк и столбцов) максимальных элементов.

Решение

 

Описание переменных: 

  • mx - заданная матрица;
  • max - значение максимального элемента;
  • qty - количество максимальных элементов в матрице;
  • id - массив для хранения номеров строк и столбцов найденных максимальных элементов;
  • i, j - переменные, используемые в качестве счетчиков и текущих индексов элементов массива.

Алгоритм решения задачи: 

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

Допустим, задача усложнена тем, что

  1. в матрице может быть несколько равных между собой максимальных элементов,
  2. их индексы нужно не просто вывести на экран, но и сохранить внутри программы.

Если бы требовалось просто вывести индексы первого попавшегося (или единственного) максимального элемента, то достаточно было бы перебрать матрицу, сравнить каждый элемент с ранее найденным максимальным значением. Как только совпадение было бы найдено, вывести на экран значения i и j. После чего прервать выполнение цикла.

Поскольку нужно запомнить индексы максимумов, то в программу вводится дополнительный двумерный массив (матрица) id. Каждая его строка состоит всего из двух элементов, в которых будут храниться номера строки и столбца найденного максимума. Количество строк массива id должно быть таким, чтобы была возможность записать в него индексы всех элементов заданной матрицы, если вдруг все они окажутся максимальными. Однако маловероятно, что все элементы матрицы будут максимальными. Поэтому массив id не будет заполнен полностью. Чтобы отслеживать сколько строк этого массива заполнено (т. е. сколько максимумов найдено), вводится переменная qty.

Итак, перебираем заданную матрицу построчно. Если очередной элемент равен значению max, то увеличиваем на 1 значение qty, а в id в его строку с номером qty записываем индексы i и j найденного максимума.

В конце программы выводим значения заполненных ранее ячеек массива id.

Программа на языке Паскаль: 

 

const N = 5; M = 7;
var
    mx: array[1..N,1..M] of integer;
    max: integer;
    i, j, qty: byte;
    id: array[1..2,1..N*M] of byte;
begin
    max := MAXINT * (-1) - 1;
    randomize;
    for i:=1 to N do begin
        for j:=1 to M do begin
            mx[i,j] := random(50) - 25;
            write(mx[i,j]:4);
            if mx[i,j] > max then max:=mx[i,j];
        end;
        writeln;
    end;
    writeln('Максимальное значение: ', max);
    qty := 0;
    for i:=1 to N do begin
        for j:=1 to M do begin
            if mx[i,j] = max then begin
                qty := qty + 1;
                id[qty,1] := i;
                id[qty,2] := j;
            end;
        end;
    end;
    for i:=1 to qty do 
        writeln('строка: ', id[i,1], '; столбец: ', id[i,2]);
end.

 

Пример выполнения программы определения индексов максимальных элементов матрицы:

 -24  -1 -14  -1  16 -13  23
 -24  -9 -22 -25  -4   8 -16
 -15  -6  -3  18   3   7 -24
  10   6 -22  17   3  -4  23
  -3 -17  -4  -6   4  18  -7
Максимальное значение: 23
строка: 1; столбец: 7
строка: 4; столбец: 7

 

Тема

Матрицы

Уровень

Комбинированные задачи