Автор: А.Вдовин
Уровень: Средней
Найдите количество четырехзначных чисел в девятеричной системе счисления, в которых есть ровна одна цифра 8, а сумма цифр слева от нее равна сумме цифр справа от нее.
Примечание: если слева или справа от 8 цифр нет, то сумма считается равной нулю
Аудио с пояснением к коду решения оставлю в комментариях.
from itertools import *
cnt = 0
for p in product('012345678', repeat=4):
num = ''.join(p)
if num[0] != '0':
if num.count('8') == 1:
i = num.index('8')
summa_left = sum(map(int, num[:i]))
summa_right = sum(map(int, num[i+1:]))
if summa_left == summa_right:
cnt += 1
print(cnt)
Ответ: 64
from itertools import * Импорт всех функций из модуля itertools, который предоставляет удобные инструменты для работы с итераторами
cnt = 0 Инициализация счётчика cnt, который будет хранить количество подходящих чисел
for p in product('012345678', repeat=4): Цикл по всем возможным комбинациям длиной 4 из цифр '012345678' (включая повторы)
num = ''.join(p) Преобразование текущей комбинации p в строку num
if num[0] != '0': Проверка, что число не начинается с нуля (чтобы избежать ведущих нулей)
if num.count('8') == 1: Проверка, что в числе ровно одна цифра '8'
i = num.index('8') Нахождение индекса цифры '8' в строке num
summa_left = sum(map(int, num[:i])) Вычисление суммы цифр слева от '8' (преобразование среза строки в числа и их суммирование)
summa_right = sum(map(int, num[i+1:])) Вычисление суммы цифр справа от '8'
if summa_left == summa_right: Проверка равенства сумм слева и справа от '8'
cnt += 1 Увеличение счётчика, если условие выполнено
print(cnt) Вывод итогового количества подходящих чисел
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍5❤3❤🔥3
Автор: А.Богданов
Уровень: Базовый
Марина собирает восьмибуквенные слова из букв своего имени. Все буквы могут многократно повторяться. На каком месте окажется имя МАРИАННА в отсортированном по алфавиту списке сгенерированных слов? Нумерация начинается с 1.
Аудио с пояснением к коду решения оставлю в комментариях.
from itertools import *
for n, p in enumerate(product(sorted('МАРИН'), repeat=8), 1):
word = ''.join(p)
if word == 'МАРИАННА':
print(n)
break
Ответ: 169466
from itertools import * Импорт всех функций из модуля itertools, включая функцию product, которая будет использоваться для генерации декартова произведения
for n, p in enumerate(product(sorted('МАРИН'), repeat=8), 1): Запуск цикла, где:
• sorted('МАРИН') сортирует символы строки 'МАРИН' в алфавитном порядке (['А', 'И', 'М', 'Н', 'Р'])
• product(..., repeat=8) генерирует все возможные комбинации длины 8 из этих символов
• enumerate(..., 1) нумерует каждую комбинацию, начиная с 1
• n хранит номер текущей комбинации, p — саму комбинацию в виде кортежа символов
word = ''.join(p) Преобразует кортеж символов p в строку word
if word == 'МАРИАННА': Проверяет, совпадает ли текущая комбинация word с искомым словом 'МАРИАННА'
print(n) Если условие выполняется, выводит номер комбинации n
break Прерывает цикл после нахождения нужного слова
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤🔥9👍4 4