Input max array (<=20) 1
Source array:
43
Min diags = 0
const
NMAX = 20;
type
TMatrix = array[1..NMAX, 1..NMAX] of integer;
function DiagSum(m: TMatrix; n: integer; diag: integer): integer;
// Вычисление суммы на главной или параллельной главной
// Пронумеруем диагонали слева-снизу вверх направо от 1 до 2*n-1
// Дальше все просто
var
s : integer;
row, col: integer;
i : integer;
begin
// по номеру диагонали выясним координаты ее левой ячейки
if diag<=n then
begin
col := 1;
row := n - diag +1;
end
else
begin
row := 1;
col := diag - n +1;
end;
// вычислим сумму по диагонали, начинающейся с ячейки [row, col]
s:= 0;
for i:= row+col-1 to n do
begin
s:= s + m[row,col];
inc(row); // вниз
inc(col); // и вправо
end;
DiagSum := s;
end;
var
i, j: integer; // просто счетчики
n : integer; // текущий размер матрицы
m : TMatrix; // наша матрица
min : integer; // минимальная сумма
d : integer; // временное хранилище суммы в цикле
begin
write('Размер матрицы от ',1, ' до ', nmax,' n=');
readln(n);
if not (n in [1..NMAX]) then
begin
writeln('Вы выбрали размер не в диапазоне, будет принят ', NMAX);
n:= NMAX;
end;
// формирование
randomize;
for i:=1 to n do
for j:=1 to n do
m[i,j]:=random(20)+1;
// эхо-печать
writeln('Введенная матрица');
for i:=1 to n do
begin
for j:=1 to n do
write(m[i,j]:3);
writeln;
end;
// вычисление минимальной суммы
min:= DiagSum(m,n,1);
for i:= 2 to 2*n-1 do
begin
d:= DiagSum(m,n,1);
if d<min then
min := d;
end;
writeln('Минимальная сумма ', min);
end.
Размер матрицы от 1 до 20 n=5
Введенная матрица
13 10 15 10 19
8 11 18 5 19
6 14 9 7 10
20 10 13 1 18
7 16 4 7 7
Минимальная сумма 7
Размер матрицы от 1 до 20 n=1
Введенная матрица
2
Минимальная сумма 2
Размер матрицы от 1 до 20 n=2
Введенная матрица
5 14
5 18
Минимальная сумма 5
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.