25.03 Маски
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
1) символ «?» означает ровно одну произвольную цифру;
2) символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих ,
найдите все числа, соответствующие маске 3*3?12, делящиеся на 3952 без остатка, у которых также сумма цифр числа
является нечётной. В ответе запишите первые пять чисел в порядке возрастания, и через пробел – соответствующие им
результаты деления этих чисел на 3952.
Решение через fnmatch
Способ решения 1: from fnmatch import fnmatch count = 0 # для оптимизации делаем цикл с шагом 3952, начиная с числа кратного 3952, для того чтобы проходиться по числам кратным 3952 for x in range(35568,10**9+1,3952): # проверка, что число соответствует маске и выполняет все условия if fnmatch(str(x),’3*3?12’) and sum(map(int,str(x))) % 2 != 0: count += 1 print(x,x//3952) if count > 4: break
Решение через itertools
from itertools import product # импортируем product из itertools digits = ’0123456789’ #все возможные цифры res = [] # список всех подходящих чисел под маску for i in range(5): # делаем перебор для звёздочки for digit_1 in product(digits,repeat = i): # симулируем звёздочку for digit_2 in product(digits,repeat = 1): # симулируем вопрос res += [int(’3’+’’.join(digit_1) + ’3’ + ’’.join(digit_2) + ’12’)] for x in sorted(set(res)): if x <= 10**9 and x % 3952 == 0 and sum(map(int,str(x))) % 2 != 0: print(x,x//3952)
Решение через срезы
# для оптимизации делаем цикл с шагом 3952, начиная с числа кратного 3952, для того чтобы проходиться по числам кратным 3952 for x in range(35568,10**9,3952): n = str(x) # проверка, что число соответствует маске и выполняет все условия if n[0] == ’3’ and ’12’ in n[-2:] and n[-4] == ’3’ and sum(map(int,n)) % 2 != 0: print(x,x//3952)
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!