Найти в Дзене

Задача 21. Зарплата

Сегодня рассмотрим одну из самых лёгких задач с сайта acmp.ru Это базовая задача без каких-либо подводных камней (как, например, в задаче 3), на которой можно отработать разные способы решения. Первым и самым неоптимальным способом решения является разбор всех возможных ситуаций. Но он позволяет понять использование вложенных ветвлений. И для трёх чисел, если честно, это выглядит не так ужасно. Однако для большего числа данных данный вариант становится непригодным. А можно реализовать именно то, что сказано в задаче: найти самое большое и самое маленькое числа. Да, это тоже можно делать с помощью вложенных ветвлений, но лучше использовать дополнительные переменные. Но для трёх элементов из знания самого большого и самого маленького следует, что мы знаем и средний элемент тоже. То есть, по сути, мы можем упорядочить все три элемента по возрастанию. Это можно сделать с помощью обмена значений переменных. Сначала сравним (и если надо поменяем) a и b, а затем b и c. Таким образом в c буде

Сегодня рассмотрим одну из самых лёгких задач с сайта acmp.ru

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

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

Решение 1 с рассмотрением всех вариантов
Решение 1 с рассмотрением всех вариантов

А можно реализовать именно то, что сказано в задаче: найти самое большое и самое маленькое числа. Да, это тоже можно делать с помощью вложенных ветвлений, но лучше использовать дополнительные переменные.

Решение 2 с поиском максимального и минимального значений
Решение 2 с поиском максимального и минимального значений

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

Сначала сравним (и если надо поменяем) a и b, а затем b и c. Таким образом в c будет лежать самое большое значение. Осталось упорядочить a и b, сделать это можно ещё одним сравнением.

Решение 3 с помощью упорядочивания значений
Решение 3 с помощью упорядочивания значений

Изучающим Python в этом решении стоит обратить внимание на элегантную конструкцию обмена значений двух переменных, которая реализуется с помощью множественного присваивания.

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

Короткое решение с использованием массива и сортировки
Короткое решение с использованием массива и сортировки

Заметим, что если в этом решении заменить индекс 2 на -1, то оно будет пригодно для любого количества входящих чисел.

Предыдущий выпуск: Класс Rational на C++

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