Дан целочисленный массив из элементов. Элементы массива различны и могут принимать значения от -10000 до 10000. Опишите на одном из языков программирования алгоритм, который находит и выводит номера двух элементов массива (в порядке возрастания), чья сумма минимальна.
Например, для исходного массива из 6 элементов
-5
10
984
419
-101
6
программа должна вывести
0
4
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. Индексация элементов в массиве начинается с 0.
Можно решать задачу двумя способами.
: найти первый и второй минимумы в массиве (наименьший элемент и элемент, следующий за минимальным в порядке возрастания) и запомнить их индексы. Для этого способа необходимо хранить индекс первого и второго минимумов и сами первый и второй минимум.
В переменной будем хранить первый минимум, в
— второй, в
— номер первого минимума, в
— второго. Так как нам известны заранее ограничения на входные данные, приравняем изначально
и
к 10001. Тогда первый (и любой) элемент массива в любом случае будет меньше
и меньше
. Их номера
и
приравняем к -1 (так как нет такого элемента, у которого индекс равен -1).
В цикле от 0 до
будем перебирать элементы массива. Если элемент оказался меньше первого минимума, то он становится первым минимумом (запишем его в
), а предыдуший первый минимум становится вторым (запишем его в
). Сделаем это так:
,
. В
запишем индекс предыдущего первого минимума (значение переменной
), в
запишем
(индекс нового первого минимума). Если элемент меньше второго минимума, но больше первого, то этот элемент становится вторым минимумом.
. В
запишем индекс этого элемента (
).
После перебора всех элементов в будет храниться первый максимум, в
— второй, а в
и
— их индексы. Выведем
и
в порядке возрастания (каждую переменную в новой строке).
Пример на (с комментариями):
//если элемент меньше первого минимума
//то предыдущий первый минимум теперь второй
//а первый — текущий элемент
//индекс второго минимума равен индексу предыдущего первого минимума
//а индекс нового первого минимума равен индексу текущего
//если элемент больше первого минимума, но меньше второго
//обновим второй минимум
//и индекс
//выведем индексы первого и второго максимумов в порядке возрастания
: в переменной
будем хранить минимальную сумму элементов массива, в
и
— индексы элементов, дающих эту сумму. Для каждого элемента будем попарно считать его сумму с другими элементами. Если она окажется меньше минимальной суммы, то обновим
,
и
.
Изначально предположим, что минимальная сумма — это сумма первых двух элементов, тогда ,
,
.
В цикле от
= 0 до
будем перебирать элементы массива. Во вложенном цикле от
=
до
будем считать сумму элементов
и
. Первый цикл от 0 до
, так как для элемента
нет элементов
(начальное значение
). Второй цикл от
, потому что мы уже рассмотрели пары элемента
с элементами, расположенными левее в массиве. Если
, то есть сумма элементов оказалась меньше минимальной, то обновим
(
) и
(
) и
(
).
После цикла выведем и
, каждый элемент в новой строке.
Пример на :