У нашего героя есть простое, но в то же время интересное правило:
- Он видит трёхзначный номер (номер машины, квартиры, телефона и т.п.).
- Обозначим цифры этого номера как a, b и c (слева направо).
- Вася складывает их попарно:
a+b,b+cиa+c. - Если хотя бы одна из этих сумм делится на 3, он загадывает желание.
Задача проста: по трём заданным цифрам определить, выполнено ли условие,
и вывести «да» (желание будет) или «нет» (не будет).
Формальная постановка задачи
Входные данные – три целых числа от 0 до 9 (возможны ведущие нули).
Выходные данные – слово да, если хотя бы одна из сумм a+b,
b+c, a+c кратна 3, иначе – нет.
Математический анализ
Делимость суммы на 3 зависит только от остатков цифр по модулю 3.
Обозначим ra = a mod 3, rb = b mod 3, rc = c mod 3.
Тогда условие «a+b ≡ 0 (mod 3)» эквивалентно «ra + rb ≡ 0 (mod 3)».
Аналогично для остальных пар.
Возможные остатки – 0, 1, 2. Перебирая их, получаем простую таблицу:
| ra | rb | rc | Условие выполнено? |
|---|---|---|---|
| 0 | 0 | 0 | да (любая пара) |
| 0 | 1 | 2 | да (1+2=3) |
| 1 | 1 | 1 | нет |
| 2 | 2 | 2 | нет |
| 1 | 2 | 2 | да (1+2=3) |
Алгоритм решения
- Считать три цифры
a, b, c. - Вычислить три попарные суммы:
s1 = a + bs2 = b + cs3 = a + c
- Если хотя бы одно из
s1, s2, s3делится на 3 (% 3 == 0),
вывестида, иначе –нет.
Оценка сложности
Время выполнения – O(1) (константное количество операций).
Память – O(1) (только несколько целочисленных переменных).
Пример реализации на Python
def vasya_wishes(a: int, b: int, c: int) -> str:
"""Возвращает 'да' если хотя бы одна попарная сумма делится на 3."""
if (a + b) % 3 == 0 or (b + c) % 3 == 0 or (a + c) % 3 == 0:
return 'да'
return 'нет'
if __name__ == '__main__':
import sys
data = sys.stdin.read.strip.split
if len(data) != 3:
print('Ошибка ввода: ожидаются три цифры')
sys.exit(1)
a, b, c = map(int, data)
print(vasya_wishes(a, b, c))
Примеры работы программы
Ввод: 2 2 2
Пояснение: суммы 2+2=4, 2+2=4, 2+2=4 – ни одна не кратна 3.
Ввод: 1 2 3
Пояснение: 1+2=3 – делится на 3, поэтому Вася загадывает желание.
Часто задаваемые вопросы
Что делать, если в числе есть ведущие нули, например «007»?
Ведущие нули – обычные цифры 0. Алгоритм работает без изменений: a=0, b=0, c=7.
Можно ли решить задачу без программирования?
Да. Достаточно посчитать три суммы вручную и проверить делимость на 3.
А если цифры не являются целыми (например, буквы в номере машины)?
В условии задачи рассматриваются только цифры. Буквы нужно предварительно игнорировать
или преобразовать в цифры согласно нумерологии, но это уже другая задача.
Почему именно делимость на 3?
Три – «магическое» число в многих культурах, а также простое, что делает проверку быстрой.
Как связаться с автором статьи?
Если у вас возникли вопросы, предложения по улучшению алгоритма или вы хотите поделиться
своими собственными «приметами», пишите на электронную почту:
- E‑mail:
vasya.math@supertips.ru - Telegram:
@VasyaMathBot
Буду рад услышать ваше мнение!
Дата публикации: