25.03 Маски
Ошибка.
Попробуйте повторить позже
Назовем маской числа последовательность цифр, в которой также могут встречаться следующие символы,
– символ "?"означает ровно одну произвольную цифру
– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 9??5*1*?3 и кратные
111. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания через
пробел.
Решение через циклы:
Для решения данной задачи через циклы потребуется перебрать варианты в заданном диапазоне и с помощью условных операторов проверить, подходит ли число под заданную маску. Зададим цикл от числа, в котором будет минимально возможное число цифр (звёздочки меняем на пустоту и получаем 7 знаков), первая цифра в нашем числе - 9, меньше проверять смысла нет, если проанализировать заданную маску. Далее возьмём минимально возможное, кратное 111. Задаём цикл до максимального числа (по условию) с шагом 111, что автоматически учтёт кратность 111. Проверим каждое полученное число и выведем нужные.
# Для оптимизации делаем цикл с шагом 111 с числа кратного 111, таким образом, мы будем проходиться только по кратным 111 числам # Возьмём минимальное число (уберём звёздочки и поставим первой 9), опираясь на маску for i in range(9005208, 10 ** 7 + 1, 111): s = str(i) # Сделаем строку, чтобы проверить число, опираясь на индексы if s[0] == "9" and s[3] == "5" and s[4] == "1" and s[6] == "3": # Проверяем, что число удовлетворяет маске print(i, end=" ") # Выводим его
Решение через fnmatch:
Функция fnmatch позволяет проверить совпадение заданной строки с маской. В неё уже встроены обозначения звёздочки и знака вопроса, а значит нам нужно просто сделать перебор. Он будет полностью аналогичен перебору с циклов, но теперь мы будем использовать функцию для проверки маски. Выведем подходящие числа.
from fnmatch import fnmatch # Импортируем функцию # Для оптимизации делаем цикл с шагом 111 с числа кратного 111, таким образом, мы будем проходиться только по кратным 111 числам # Возьмём минимальное число (уберём звёздочки и поставим первой 9), опираясь на маску for x in range(9005208, 10**7+1,111): if fnmatch(str(x), "9??5*1*?3"): # Проверяем, что число удовлетворяет маске. Функция всё сделает за нас. print(x) # Выводим подходящие числа
Специальные программы

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

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

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

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

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

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