Pers.narod.ru. Алгоритмы. Нахождение второго по величине максимального (минимального) значения в массиве

Найти второй по величине максимальный (минимальный) элемент в данном массиве за однократный просмотр массива. Задача включена в рекомендуемые для подготовки к ЕГЭ по информатике 2010 года.

Вот одна из возможных версий такой программы для поиска и вывода второго по величине значения:

const n=5;
const a:array [1..n] of integer =
 (7,7,7,7,6);
var i,max,max2:integer;
begin
 max:=a[1];
 max2:=-MAXINT;
 for i:=2 to n do
  if a[i]>max then begin max2:=max; max:=a[i]; end
  else if (a[i]<max) and (a[i]>max2) then max2:=a[i];
 if max2=-MAXINT then writeln ('max2 incorrect',',max=',max)
 else writeln ('max2=',max2,',max=',max);
end.

Обратим внимание на несколько нюансов в этом решении:

Если по условию все элементы массива имеют разные значения, программа упрощается до

const n=5;
const a:array [1..n] of integer =
 (6,5,7,4,3);
var i,max,max2:integer;
begin
 max:=a[1];
 max2:=a[2];
 for i:=2 to n do
  if a[i]>max then begin max2:=max; max:=a[i]; end
  else if a[i]>max2 then max2:=a[i];
 writeln ('max2=',max2,',max=',max);
end.

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

const n=5;
const a:array [1..n] of integer =
 (6,7,7,7,7);
var i,min,min2:integer;
begin
 min:=a[1];
 min2:=MAXINT;
 for i:=2 to n do
  if a[i]<min then begin min2:=min; min:=a[i]; end
  else if (a[i]>min) and (a[i]<min2) then min2:=a[i];
 if min2=MAXINT then writeln ('min2 incorrect',',min=',min)
 else writeln ('min2=',min2,',min=',min);
end.

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

Рейтинг@Mail.ru

вверх гостевая; E-mail
Hosted by uCoz