Дана последовательность целых чисел, не превосходящих по модулю `10000`. Ноль - признак конца. Вывести минимальное произведение двух элементов этой последовательности.
Паскаль зфтш
Ответы на вопрос:
На первый взгляд кажется, что задача Поскольку последовательность состоит из целых чисел, то среди них могут быть и отрицательные, а значит, минимальное произведение получится, если умножить максимальное положительное число на минимальное отрицательное. Однако, это не так, если в последовательность входят только положительные или только отрицательные числа, поэтому такие случаи требуют особого рассмотрения.
Если все элементы последовательности положительные, то очевидно, что минимальное произведение – это произведение двух минимальных элементов последовательности. Если же все элементы последовательности отрицательные, то как ни странно, минимальное произведение дадут два максимальных элемента последовательности (так как они по модулю ближе всех к нулю, а минус на минус даёт плюс).
Таким образом, получается, что нам необходимо найти в последовательности два максимальных и два минимальных элемента, а потом выбрать минимальное произведение из трёх. Для одновременного поиска двух максимальных элементов можно использовать стратегию «турнирной таблицы». После считывания каждого элемента нужно будет сравнивать его с текущими значениями первого и второго максимума, и разбирать случаи. Их будет три. Первый случай – очередной элемент последовательности больше текущего значения первого максимума. Тогда нужно первый максимум опустить на вторую позицию, а на первую позицию записать новый элемент. Второй случай – элемент не больше первого максимума (возможно, что равен ему), но больше второго. Тогда первый максимум не изменяется, а на вторую позицию записывается считанный элемент. Третий случай – элемент не больше второго максимума (возможно, что равен ему). В этом случае нам не нужно предпринимать никаких действий. Минимумы ищутся аналогично.
Остаётся последний во какие начальные значения задать максимумам и минимумам. По аналогии с задачей № 2 в максимумы нужно записывать числа, которые гарантированно меньше любого элемента последовательности, а в минимумы – числа, которые гарантированно больше любого элемента последовательности.
var a,max1,max2,min1,min2,p:integer;
begin
max1 := -10001;
max2 := -10001;
min1 := 10001;
min2 := 10001;
read(a);
while a <> 0 do begin
if a > max1
then begin
max2 := max1;
max1 := a
end
else if a > max2 then max2 := a;
if a < min1
then begin
min2 := min1;
min1 := a
end
else if a < min2 then min2:=a;
read(a)
end;
p := max1 * min1;
if max1 * max2 < p then p := max1 * max2;
if min1 * min2 < p then p := min1 * min2;
writeln(p)
end.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
Kotikiwin06.04.2021 05:10
-
алибекalmaiurbrhje18.11.2020 13:57
-
RыBкA10927.08.2020 06:48
-
GrigoriyPokoti10.06.2022 00:18
-
lol271015.01.2021 16:11
-
Digger200130.07.2021 01:54
-
hdjdhd109.09.2020 01:40
-
Aann123.03.2022 01:25
-
jvdvzkris26.03.2021 14:40
-
Znatokkekgg30.12.2022 20:31
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.