N. Властелин Чисел: Две Башни

Во времена, когда люди верили в великую силу чисел, оказалось, что волшебник Пифуман предал все народы и стал помогать Зерону.

Чтобы посетить башни обоих злодеев одновременно, нам следует разделить магию числа, которое защищало нас в дороге.

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

Формат ввода

Одно трёхзначное число.

Формат вывода:

Два защитных числа для каждого отряда, записанные через пробел.

Пример

Ввод

103

Вывод

10 31

Ввод

787

Вывод

77 87

Решение

Эта задача вызывает много затруднений. Часто строятся огромные конструкции для того, чтобы расставить значения по порядку. В то же время задача становится элементарной, если для начала отсортировать значения с помощью приема, который мы уже использовали в задании K. Красота спасёт мир: с помощью функций min() и max() находим минимальное и максимальное значения из трех. Среднее значение вычисляем по формуле сумма всех цифр минус максимальное и минимальное.

Максимальное возможное двузначное число находится очень просто – максимальная цифра умноженная на 10 + средняя по значению цифра.

Минимальное возможное число – находится аналогично максимальному с той лишь разницей, что в качестве десятков будет использоваться минимальная цифра. С ней как раз есть загвоздка – если она равна нулю, то у нас не получится двузначного числа потому, что 05 равно 5. В этом случае достаточно поменять цифры местами и число по-прежнему останется минимально возможным. Если число по-прежнему меньше 10, то стоит взять максимальную цифру на первую позицию.

Посмотреть код

Решение

Python
# Сортировка

num = int(input())

first = num // 100
second = num // 10 % 10
third = num % 10

if first > second:
    first, second = second, first
if first > third:
    first, third = third, first
if second > third:
    second, third = third, second


minimal = first * 10 + second

if minimal < 10:
    minimal = second * 10 + 0
if minimal < 10:
    minimal = third * 10 + 0

maximal = third * 10 + second

print(minimal, maximal)

Решение

Python
# Поиск среднего через сравнения

num = int(input())

first = num // 100
second = num // 10 % 10
third = num % 10


if max(first, second, third) != first and min(first, second, third) != first:
    middle = first
elif max(first, second, third) != second and min(first, second, third) != second:  # noqa
    middle = second
elif max(first, second, third) != third and min(first, second, third) != third:
    middle = third
elif first == second or first == third:
    middle = first
elif second == third:
    middle = third

if min(first, second, third) != 0:
    minimal = min(first, second, third) * 10 + middle
elif middle != 0:
    minimal = middle * 10
else:
    minimal = max(first, second, third) * 10
maximal = max(first, second, third) * 10 + middle

print(minimal, maximal)

Решение

Python
# Поиск среднего через сумму/разницу

num = int(input())

first = num // 100
second = num // 10 % 10
third = num % 10


middle = first + second + third - min(first, second, third) - max(first, second, third)

if min(first, second, third) != 0:
    minimal = min(first, second, third) * 10 + middle
elif middle != 0:
    minimal = middle * 10
else:
    minimal = max(first, second, third) * 10
maximal = max(first, second, third) * 10 + middle

print(minimal, maximal)
Подписаться
Уведомить о
guest
13 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии