Вмассиве а[1..n,1..n] определить номера строки и столбца какой-нибудь седловой точки. некоторый элемент массива называется седловой точкой, если он является одновременно наименьшим в своей строке и наибольшим в своем столбце
Const n = 6; // число строк m = 6; // число столбцов
var a: array[1..n, 1..m] of integer; // основной массив Rext: array[1..n, 1..2] of integer; // номера столбцов с min и max в строках Cext: array[1..2, 1..m] of integer; // номера строк с min и max в столбцах i, j, amin, amax: integer;
begin // заполняем массив А случайными числами Randomize; writeln('Исходный массив'); for i := 1 to n do begin for j := 1 to m do begin a[i, j] := random(100) - 50; write(a[i, j]:4); end; writeln; end; // Заполняем массив Rext n x 2 for i := 1 to n do begin amin := 10000; //заведомо больше a[i,j] amax := -10000; //заведомо меньше a[i,j] for j := 1 to m do begin if amin > a[i, j] then begin amin := a[i, j]; Rext[i, 1] := j end; if amax < a[i, j] then begin amax := a[i, j]; Rext[i, 2] := j end end; end; // Заполняем массив Cext 2 x m for j := 1 to m do begin amin := 10000; //заведомо больше a[i,j] amax := -10000; //заведомо меньше a[i,j] for i := 1 to n do begin if amin > a[i, j] then begin amin := a[i, j]; Cext[1, j] := i end; if amax < a[i, j] then begin amax := a[i, j]; Cext[2, j] := i end end end; writeln; // Ищем седловые точки writeln('*** Седловые точки ***'); for i := 1 to n do begin j := Rext[i, 1]; if Cext[2, j] = i then write('[', i, ',', j, '] ') else begin j := Rext[i, 2]; if Cext[1, j] = i then write('[', i, ',', j, '] ') end end; writeln end.
Const N = 5; var i, j: integer; a: array[1..N, 1..N] of integer; min, max: array[1..N] of integer; begin writeln('Исходный массив: '); for i := 1 to N do begin for j := 1 to N do begin a[i, j] := Random(10); write(a[i, j] : 3); if (j = 1) or (max[i] > a[i, j]) then max[i] := a[i, j]; if (i = 1) or (min[j] < a[i, j]) then min[j] := a[i, j]; end; writeln; end; writeln('Седловые точки: '); for i := 1 to N do for j := 1 to N do if max[i] = min[j] then writeln('[', i, '; ', j, ']'); end.
n = 6; // число строк
m = 6; // число столбцов
var
a: array[1..n, 1..m] of integer; // основной массив
Rext: array[1..n, 1..2] of integer; // номера столбцов с min и max в строках
Cext: array[1..2, 1..m] of integer; // номера строк с min и max в столбцах
i, j, amin, amax: integer;
begin
// заполняем массив А случайными числами
Randomize;
writeln('Исходный массив');
for i := 1 to n do
begin
for j := 1 to m do
begin
a[i, j] := random(100) - 50;
write(a[i, j]:4);
end;
writeln;
end;
// Заполняем массив Rext n x 2
for i := 1 to n do
begin
amin := 10000; //заведомо больше a[i,j]
amax := -10000; //заведомо меньше a[i,j]
for j := 1 to m do
begin
if amin > a[i, j] then begin
amin := a[i, j]; Rext[i, 1] := j
end;
if amax < a[i, j] then begin
amax := a[i, j]; Rext[i, 2] := j
end
end;
end;
// Заполняем массив Cext 2 x m
for j := 1 to m do
begin
amin := 10000; //заведомо больше a[i,j]
amax := -10000; //заведомо меньше a[i,j]
for i := 1 to n do
begin
if amin > a[i, j] then begin
amin := a[i, j]; Cext[1, j] := i
end;
if amax < a[i, j] then begin
amax := a[i, j]; Cext[2, j] := i
end
end
end;
writeln;
// Ищем седловые точки
writeln('*** Седловые точки ***');
for i := 1 to n do
begin
j := Rext[i, 1];
if Cext[2, j] = i then
write('[', i, ',', j, '] ')
else begin
j := Rext[i, 2];
if Cext[1, j] = i then
write('[', i, ',', j, '] ')
end
end;
writeln
end.
Тестовое решение
Исходный массив
10 25 38 38
45 32 42 36
-39 -6 9 48
-25 -37 40 30
*** Седловые точки ***
[2,2]
N = 5;
var
i, j: integer;
a: array[1..N, 1..N] of integer;
min, max: array[1..N] of integer;
begin
writeln('Исходный массив: ');
for i := 1 to N do begin
for j := 1 to N do begin
a[i, j] := Random(10);
write(a[i, j] : 3);
if (j = 1) or (max[i] > a[i, j]) then max[i] := a[i, j];
if (i = 1) or (min[j] < a[i, j]) then min[j] := a[i, j];
end;
writeln;
end;
writeln('Седловые точки: ');
for i := 1 to N do
for j := 1 to N do
if max[i] = min[j] then writeln('[', i, '; ', j, ']');
end.