Найти два максимальных элемента массива
В массиве чисел найти два максимальных элемента.
Данная задача требует пояснений и конкретизации:
- должны ли быть равны между собой эти элементы;
- или они могут быть разными, но больше, чем все остальные элементы. Например, в массиве [4, 7, 2, 6, 9] два максимальных элемента - это числа 9 и 7.
В данном случае будем считать, что надо найти два наибольших элемента одномерного массива. При этом они могут быть как равны между собой, так и различаться.
Задачу можно решить разными способами. Наиболее простой для понимания - это использование двух переборов массива. В первом ищется первый максимум. Во втором - второй, при этом первый максимальный элемент исключается с помощью условного оператора if
. Пример кода программы:
const
N = 10;
var
a: array[1..N] of integer;
i, max1, max2: byte;
begin
randomize;
for i := 1 to N do begin
a[i] := random(10);
write(a[i]:3);
end;
writeln;
max1 := 1;
for i := 2 to N do
if a[i] > a[max1] then
max1 := i;
if max1 = 1 then
max2 := 2
else
max2 := 1;
for i := 1 to N do
if i <> max1 then // чтобы пропустить max1
if a[i] > a[max2] then
max2 := i;
writeln('Максимумы: ', a[max1], ' и ', a[max2]);
end.
Здесь переменные max1 и max2 хранят не значения элементов, а их индексы (по индексу всегда можно получить значение).
Выражение if max1 = 1 then max2 := 2 else max2 := 1;
необходимо по следующей причине. Мы не знаем, какое начальное значение следует присвоить переменной max2. Ведь если первый наибольший элемент будет первым, и мы присвоим max2 значение 1, то никогда не найдем второй наибольший.
В цикле, определяющем второй максимум, сначала проверяется, не совпадает ли номер текущего элемента с уже учтенным в max1. Только после этого происходит сравнение значения текущего элемента со значением элемента с индексом max2.
Пример выполнения кода:
4 8 0 9 5 8 6 5 4 6
Максимумы: 9 и 8