Вася – настоящий любитель цифр․ Он считает, что в любой трёхзначной комбинации (номер машины, квартира и т․п․) скрыты тайные знаки судьбы․ Его «примета» выглядит так:
- Берём три цифры a, b и c․
- Считаем три попарные суммы: a + b, b + c, a + c․
- Если хотя бы одна из этих сумм делится на 3, то Вася загадывает желание․
Наша задача – по заданным трём цифрам определить, выполнится ли условие приметы и вывести «да» или «нет»․
Формулировка задачи
Входные данные – три целых числа от 0 до 9 (возможны ведущие нули)․
Выходные данные – слово да, если хотя бы одна из сумм a+b, b+c или a+c делится на 3, иначе – слово нет;
Математический фон: признак делимости на 3
Из школьной программы известен простой признак делимости на 3:
- Число делится на 3 тогда и только тогда, когда сумма его цифр делится на 3․
Для нашей задачи это правило применяется к сумм a+b, b+c и a+c․ Поскольку каждая из этих сумм – обычное целое число, проверка делимости сводится к вычислению остатка от деления на 3:
if (sum % 3 == 0) → делится Алгоритм решения
Алгоритм предельно прост:
- Считать три цифры
a,b,c․ - Вычислить три суммы:
s1 = a + bs2 = b + cs3 = a + c
- Проверить, делится ли хотя бы одна из сумм на 3:
if (s1 % 3 == 0 or s2 % 3 == 0 or s3 % 3 == 0): answer = "да" else: answer = "нет" - Вывести полученный ответ․
Доказательство корректности
Пусть a, b, c – любые цифры (0 ≤ a,b,c ≤ 9)․ Мы рассматриваем три попарные суммы:
s1 = a + bs2 = b + cs3 = a + c
Если хотя бы одна из этих сумм делится на 3, то по определению приметы Вася загадывает желание․ Алгоритм проверяет именно это условие, используя оператор % 3, который возвращает остаток от деления․ Остаток равен 0 ⇔ число кратно 3․ Поэтому алгоритм возвращает «да» тогда и только тогда, когда условие приметы выполнено․ Следовательно, алгоритм корректен․
Оценка сложности
Алгоритм использует фиксированное количество арифметических операций и проверок, независимо от входных данных․ Поэтому:
- Временная сложность – O(1) (константное время)․
- Память – O(1) (только несколько целочисленных переменных)․
Реализация на Python
Ниже приведён полностью готовый пример решения, совместимый с любой современной версией Python (3․x)․
#!/usr/bin/env python3
def will_wish(a: int, b: int, c: int) -> str:
"""
Возвращает 'да', если хотя бы одна из попарных сумм
a+b, b+c, a+c делится на 3, иначе – 'нет'․
"""
if (a + b) % 3 == 0 or (b + c) % 3 == 0 or (a + c) % 3 == 0:
return "да"
return "нет"
def main:
import sys
# Читаем три цифры из стандартного ввода․
# Формат ввода может быть: "1 4 7" или "147" – поддерживаем оба варианта․
data = sys․stdin․read․strip․split
if len(data) == 1 and len(data[0]) == 3:
# Один токен из трёх символов, разбиваем на отдельные цифры․
a, b, c = map(int, data[0])
else:
# Ожидаем три отдельных числа․
a, b, c = map(int, data[:3])
print(will_wish(a, b, c))
if __name__ == "__main__":
main
Примеры работы программы
| Ввод | Пояснение | |
|---|---|---|
| 1 2 3 | да | 1+2=3 делится на 3 → желание․ |
| 4 5 6 | да | 4+5=9 делится на 3․ |
| 1 1 1 | нет | Все суммы равны 2, не кратны 3․ |
| 0 0 0 | да | Любая сумма = 0, а 0 делится на 3․ |
Задача о Васе и его примете – отличный пример того, как простое арифметическое правило (делимость на 3) может стать основой для небольшого алгоритмического упражнения․ Мы разобрали математический смысл, сформулировали алгоритм, доказали его корректность и оценили эффективность․ Теперь любой желающий может быстро реализовать решение на любом удобном языке программирования․
Дата генерации статьи: 14 августа 2026 г․