Вася и желания

У нашего героя есть простое, но в то же время интересное правило:

  • Он видит трёхзначный номер (номер машины, квартиры, телефона и т.п.).
  • Обозначим цифры этого номера как 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)

Алгоритм решения

  1. Считать три цифры a, b, c.
  2. Вычислить три попарные суммы:
    • s1 = a + b
    • s2 = b + c
    • s3 = a + c
  3. Если хотя бы одно из 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

Буду рад услышать ваше мнение!


Дата публикации: