Программа курса:
Разбор задачи: Счастливое число
Предложенный нами код решения:
def is_happy(n):
"""
Определяет, является ли число n счастливым.
:param n: Положительное целое число.
:return: True, если число является счастливым, иначе False.
"""
seen = set()
while n != 1 and n not in seen:
seen.add(n)
n = sum(int(digit) ** 2 for digit in str(n))
return n == 1Логика работы функции
- Входные данные:
n: Положительное целое число.
- Идея алгоритма:
- Счастливое число определяется последовательным вычислением суммы квадратов цифр числа.
- Если на каком-то этапе результат становится равным
1, число считается счастливым. - Если вычисления зацикливаются (результат повторяется), число не является счастливым.
- Алгоритм работы:
- Используется множество
seenдля отслеживания всех чисел, которые встречались в процессе вычислений, чтобы избежать бесконечного цикла. - Пока число
nне равно1и не попало в множествоseen:- Добавить
nв множествоseen. - Заменить
nна сумму квадратов его цифр.
- Добавить
- После завершения цикла проверяется, равно ли число
nединице. Если да, возвращаетсяTrue; иначеFalse.
- Используется множество
Разбор кода
seen = set()
- Создаётся пустое множество
seen. - Оно используется для хранения всех ранее вычисленных значений
n, чтобы отслеживать возможные циклы.
while n != 1 and n not in seen:
- Цикл выполняется, пока:
nне равно1(т.е. число ещё не признано счастливым).nотсутствует вseen(т.е. не обнаружен цикл).
seen.add(n)
- Добавляет текущее значение
nв множествоseen, чтобы отслеживать уже обработанные числа.
n = sum(int(digit) ** 2 for digit in str(n))
- Преобразует число
nв строку для работы с его цифрами. - Для каждой цифры:
- Преобразует её обратно в целое число (
int(digit)). - Возводит в квадрат (
int(digit) ** 2).
- Преобразует её обратно в целое число (
- Суммирует квадраты всех цифр, заменяя исходное значение
n.
return n == 1
- Проверяет, равно ли текущее значение
nединице. - Если равно, возвращается
True, так как число считается счастливым. - Если цикл завершился из-за повторения числа в
seen, возвращаетсяFalse.
Пример работы функции
Пример 1: n = 19
- Исходное число:
19. - Последовательность вычислений:
- 12+92=1+81=821^2 + 9^2 = 1 + 81 = 8212+92=1+81=82
- 82+22=64+4=688^2 + 2^2 = 64 + 4 = 6882+22=64+4=68
- 62+82=36+64=1006^2 + 8^2 = 36 + 64 = 10062+82=36+64=100
- 12+02+02=11^2 + 0^2 + 0^2 = 112+02+02=1
- Цикл завершается, так как
n = 1. - Возвращается
True.
Пример 2: n = 4
- Исходное число:
4. - Последовательность вычислений:
- 42=164^2 = 1642=16
- 12+62=1+36=371^2 + 6^2 = 1 + 36 = 3712+62=1+36=37
- 32+72=9+49=583^2 + 7^2 = 9 + 49 = 5832+72=9+49=58
- 52+82=25+64=895^2 + 8^2 = 25 + 64 = 8952+82=25+64=89
- 82+92=64+81=1458^2 + 9^2 = 64 + 81 = 14582+92=64+81=145
- 12+42+52=1+16+25=421^2 + 4^2 + 5^2 = 1 + 16 + 25 = 4212+42+52=1+16+25=42
- 42+22=16+4=204^2 + 2^2 = 16 + 4 = 2042+22=16+4=20
- 22+02=42^2 + 0^2 = 422+02=4
- Обнаружен цикл: 4→16→37→58→89→145→42→20→44 \to 16 \to 37 \to 58 \to 89 \to 145 \to 42 \to 20 \to 44→16→37→58→89→145→42→20→4.
- Возвращается
False.
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии