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

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

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

Задача складывается из двух подзадач, которые должны быть решены последовательно:

  1. Поиск минимума в массиве (в данном случае двумерном).
  2. Поиск элементов, равных ранее найденному минимуму.

Найденное минимальное значение должно быть сохранено в переменной (например, minimum). Однако можно было бы сохранять не само значение, а индекс элемента массива. Но поскольку мы имеем дело с матрицей, то пришлось бы сохранять два числа (номер строки и номер столбца).

Алгоритм поиска минимального значения:

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

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

  1. Снова перебираем элементы матрицы.
  2. Сравниваем каждый элемент со значением minimum.
  3. Если они равны между собой, то выводим индексы текущего элемента на экран. (Индексы текущего элемента - это значения счетчиков первого и второго циклов.)

Примечания:

  • Ниже в решениях задачи поиска индексов минимальных элементов на языках программирования поиск минимального значения выполняется в том же цикле, что и заполнение матрицы.
  • Если индексация массива начинается с нуля, то лучше при выводе индексов увеличивать их на единицу. Так будет более ясно, где находится элемент.
const N = 5; M = 7;
var
    mx: array[1..N,1..M] of integer;
    min: integer;
    i, j: byte;
begin
    min := MAXINT;
    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] < min then min:=mx[i,j];
        end;
        writeln;
    end;
    writeln('Минимальное значение: ', min);
    for i:=1 to N do
        for j:=1 to M do
            if mx[i,j] = min then
                writeln('строка: ', i, '; столбец: ', j);
end.
 -19   6   3  18 -12  -3  24
  -4  15  -6  19 -15  -1   4
   6  -9 -12  23  -3   3 -11
   5   0 -11  -4 -19  -6   1
  17  20  -1   6  17  -1  15
Минимальное значение: -19
строка: 1; столбец: 1
строка: 4; столбец: 5
#include <stdio.h>
#define M 7
#define N 5
main() {
    int a[N][M];
    int min, i, j;
    srand(time(NULL));
    min = 25;
    for (i=0; i<N; i++) {
        for (j=0; j<M; j++) {
            a[i][j] = rand() % 50 - 25;
            printf("%5d", a[i][j]);
            if (min > a[i][j]) min = a[i][j];
        }
        printf("\n");
    }
    printf("%d\n", min);
    for (i=0; i<N; i++) {
        for (j=0; j<M; j++) {
            if (min == a[i][j])
                printf("row: %d, col: %d\n", i+1, j+1);
        }
    }
}
from random import random
M = 7
N = 5
a = []
for i in range(N):
    b = []
    for j in range(M):
        b.append(int(random()*50) - 25)
        print("%4d" % b[j], end='')
    a.append(b)
    print()
min_mx = 25
for i in range(N):
    min_i = min(a[i])
    if min_i < min_mx:
        min_mx = min_i
print(min_mx)
for i in range(N):
    for j in range(M):
        if min_mx == a[i][j]:
            print('Row: %d, col: %d' % (i+1,j+1))

Пример выполнения:

 -18 -23  -8  17  12   4 -22
  16 -10 -18   6  -9  19  23
   8  -1  -7   0  -9  24 -12
  -5  16  14  -2   1   7 -16
  -7   5   1 -23  -4  -4  17
-23
Row: 1, col: 2
Row: 5, col: 4

В языке Python есть встроенная функция min, которая возвращает минимальный элемент одномерного списка. Если же ее применить к двумерному списку, то она возвращает вложенный список, первый элемент которого оказывается минимальным.

Поэтому в коде поиска минимального элемента матрицы эта функция используется к каждой строке (вложенному списку) отдельно.

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

Классический вариант поиска минимального значения матрицы выглядел бы так:

 ... min_mx = 25 for i in range(N): for j in range(M): if a[i][j] &lt; min_mx: min_mx = a[i][j] ...

алг индексы минимумов
нач
    цел M = 7, N = 5
    цел таб a[1:N,1:M]
    цел i, j, minimum
    minimum := 25
    нц для i от 1 до N
         нц для j от 1 до M
              a[i,j] := int(rand(0,50)) - 25
              вывод a[i,j]:4, "  "
              если minimum > a[i,j] то
                  minimum := a[i,j]
              все
         кц
         вывод нс
    кц
    вывод minimum, нс
    нц для i от 1 до N
         нц для j от 1 до M
             если minimum = a[i,j] то
                  вывод "строка: ",i, ", столбец: ",j, нс
             все
         кц
    кц
кон
M = 7
N = 5
dim a(N,M)
min = 25
for i = 0 to N-1
        for j=0 to M-1
                a[i,j] = int(rand*50)-25
                print a[i,j] + "   ";
                if min > a[i,j] then min = a[i,j]
        next j
        print
next i
print min
for i = 0 to N-1
        for j=0 to M-1
                if min = a[i,j] then print (i+1) + "   " + ( j+1)
        next j
next i