Найти в Дзене

Задача 272. Сумма максимума и минимума

Давайте разберём довольно сложную задачу для начинающих. Сначала читаем условие: Напишем тривиальное решение, которое не использует никаких особенностей языка программирования и может быть с лёгкостью переписано на любой другой язык программирования. А потом будем его улучшать. Считаем входные данные. Здесь есть особенность, что сначала не указано количество входных чисел. Для Python это не проблема, потому что можно считать сразу всю строку, разбить её по пробелам и каждый кусочек преобразовать в число: Заведём переменные для хранения максимального и минимального значений. А также проинициализируем их первыми двумя элементами списка. Это можно сделать, потому что гарантируется, что в списке от двух элементов: Основное действие в задаче - пройти по всему массиву чисел и посчитать минимум среди одних элементов и максимум среди других. Это можно сделать одним циклом for, внутри которого проверять чётность индекса (с помощью остатка от деления на 2): Да, здесь использовались две встроенны

Давайте разберём довольно сложную задачу для начинающих. Сначала читаем условие:

Условие задачи с сайта acmp.ru
Условие задачи с сайта acmp.ru

Напишем тривиальное решение, которое не использует никаких особенностей языка программирования и может быть с лёгкостью переписано на любой другой язык программирования. А потом будем его улучшать.

Считаем входные данные. Здесь есть особенность, что сначала не указано количество входных чисел. Для Python это не проблема, потому что можно считать сразу всю строку, разбить её по пробелам и каждый кусочек преобразовать в число:

Считываем входные данные
Считываем входные данные

Заведём переменные для хранения максимального и минимального значений. А также проинициализируем их первыми двумя элементами списка. Это можно сделать, потому что гарантируется, что в списке от двух элементов:

Определение переменных для хранения ответа
Определение переменных для хранения ответа

Основное действие в задаче - пройти по всему массиву чисел и посчитать минимум среди одних элементов и максимум среди других. Это можно сделать одним циклом for, внутри которого проверять чётность индекса (с помощью остатка от деления на 2):

Вычисление минимума и максимума
Вычисление минимума и максимума

Да, здесь использовались две встроенные функции max и min, но они есть в каждом языке программирования.

Теперь вывод ответа не представляет сложности:

Вывод ответа
Вывод ответа

В этом решении мы одновременно вычисляли максимальное и минимальное значения. Это может быть полезным, если данные поточные, то есть к ним нельзя было бы обратиться второй раз (такое редно встречается в учебных задачах, но бывает на практике). В нашем же случае, всё лежит в массиве и мы можем разделить поиск на два прохода по нему:

Вычисление максимума и минимума в разных циклах
Вычисление максимума и минимума в разных циклах

Здесь мы используем возможность задать шаг в цикле и тем самым сразу идём по нужным элементам. Такое решение имеет плюс в том, что не надо использовать условие на чётность.

А ещё оно может натолкнуть на мысль использовать слайсы. Раз нам надо лишь найти минимум (или максимум) в строго определённом порядке, то можно использовать преимущество языка Python и его функции min (max), в которую можно передать целый список, а не только два элемента:

Полное решение с использованием слайсов
Полное решение с использованием слайсов

Вот так путём последовательных преобразований у нас снова получилось решение задачи в одну строку.

Предыдущий выпуск: Задача 18. Факториал

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