Найти в Дзене

Задача 327. В одном шаге от счастья

Модификация классической задачи на проверку счастливости билета. Условие:

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

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

Считываем количество тестов
Считываем количество тестов

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

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

К числу мы приводим, так как проверять на счастливость нам надо будет не этот номер, а больший или меньший на 1. Для этого нам понадобятся операции прибавления и вычитания.

Предположим, что у нас уже написана функция f(a), которая проверяет счастливость числа a. Тогда для вывода ответа, нам надо лишь запустить её дважды:

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

Если хотя бы один из запусков функции вернёт True, то выводим Yes (внимательно с регистром букв), иначе - No.

А теперь перейдём к самому интересному - функции f. С числом проделаем следующие операции:

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

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

Функция проверки числа на счастливость
Функция проверки числа на счастливость

Здесь очень важно делить на части условием "три последних" и "все, кроме трёх последних", а не "три первых" и "все, начиная с четвёртого". Так как во входной строке могут быть ведущие нули, и при преобразовании к числу, а потом снова к строке, строка получится короче. Например "012201" -> 12201 -> "12201". Если у итоговой строки взять первые три и все остальные, то ответ No. А правильный - Yes.

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

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