Найти минимальный элемент матрицы ниже побочной диагонали
В квадратной матрице найти минимальный элемент ниже побочной диагонали. Вывести на экран в табличном виде исходную матрицу и отдельно часть матрицы ниже побочной диагонали.
Побочная диагональ матрицы идет от верхнего правого угла до нижнего левого. Пусть N - это размерность квадратной матрицы, i - это номер строки, а j - номер столбца (или номер элемента в строке). Тогда, если перебирать построчно матрицу, то элемент, стоящий на побочной диагонали будет иметь индекс [i, N-i+1]
. Действительно, когда i = 1
, то j = N
, то есть это последний элемент первой строки. Когда i = 2
, то j = N - 1
, - это предпоследний элемент второй строки; и так далее.
Таким образом можно сделать вывод, что все элементы в конкретной строке от побочной диагонали и до конца строки имеют индексы от N-i+1
до N.
Учитывая то, что сама диагональ нас не интересует, следует в каждой строке первым брать не элемент диагонали, а следующий за ним. Следовательно, формула первого элемента строки после побочной диагонали будет иметь вид N-i+2
.
Для того, чтобы вывести часть матрицы ниже побочной диагонали так же, как она располагается в выводе всей матрицы, надо заполнить строку пробелами в количестве, соответствующем количеству невыведенных элементов. Так, в примере ниже, на каждый элемент отводится 5 знакомест. Количество невыведенных элементов каждой строки равно N-i+1
. Таким образом общее количество пробелов равно 5(N-i+1
).
Сам поиск минимума - это самая легкая часть задачи. При выводе элементов, расположенных ниже побочной диагонали, их заодно можно проверять, не меньше ли они уже найденного минимума.
Программа на языке Паскаль:
const N = 10;
var
m: array[1..N,1..N] of integer;
i, j: byte;
min: integer;
begin
randomize;
for i:=1 to N do begin
for j:=1 to N do begin
m[i,j] := random(100) - 50;
write(m[i,j]:5);
end;
writeln;
end;
min := 32767;
for i:=1 to N do begin
write(' ':5 * (N - i+1));
for j:=N-i+2 to N do begin
write(m[i,j]:5);
if min > m[i,j] then min := m[i,j];
end;
writeln();
end;
writeln('Minimum: ', min);
end.
Пример выполнения:
37 -15 -14 25 -18 28 -49 -27 -32 -38
-10 -26 1 33 49 0 41 28 11 39
-43 -5 -33 33 -15 5 -15 -3 1 -24
-19 -27 -24 16 46 10 28 47 41 -15
26 42 -1 6 46 22 -1 -20 11 -34
-48 10 -45 25 -34 30 5 35 -32 24
-26 33 29 -37 -11 -14 -11 -10 -7 -15
-12 27 -17 24 -46 23 -30 -31 -38 -19
30 -44 37 37 -27 40 -7 19 -29 -32
8 -33 47 -26 31 43 11 -3 24 5
39
1 -24
47 41 -15
-1 -20 11 -34
30 5 35 -32 24
-11 -14 -11 -10 -7 -15
24 -46 23 -30 -31 -38 -19
37 37 -27 40 -7 19 -29 -32
-33 47 -26 31 43 11 -3 24 5
Minimum: -46