Тема 25. Обработка целочисленной информации

25.03 Маски

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#26692

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Среди натуральных чисел, не превышающих 109  , найдите все числа, соответствующие маске ?3579  ?6  * и делящиеся на 7  без остатка. В ответе запишите количество найденных чисел.

Показать ответ и решение

Решение через циклы

ans = 0
for i in range(1, 10): # для первого вопроса исключаем 0 - число не может начинаться с 0
    for j in range(10):
        # пустая звёздочка
        s = str(i) + ’3579’ + str(j) + ’6’
        if int(s) % 7 == 0:
            ans += 1
        #односимвольная звёздочка
        for w in range(10):
            s1 = str(i) + ’3579’ + str(j) + ’6’ + str(w)
            if int(s1)%7 == 0:
                ans += 1
        #двухсимвольная звёздочка
        for w in range(10):
            for z in range(10):
                s2 = str(i) + ’3579’ + str(j) + ’6’ + str(w) + str(z)
                if int(s2)%7 == 0:
                    ans += 1
print(ans)

Решение через itertools

from itertools import product # импортируем product из itertools
digits = ’0123456789’ #все возможные цифры
d = ’123456789’ # цифры для первого вопроса, он стоит на первом месте, число не может начинаться с нуля
ans = [] # список всех подходящих чисел под маску
for digit_1 in product(d,repeat = 1): # формируем вопрос
    for digit_2 in product(digits,repeat = 1): # формируем вопрос
        for i in range(4): # делаем перебор для звёздочки, в нашем случае, в звёздочке не может быть более 3 цифр и при этом чтобы число было меньше 10**9
            for digit_3 in product(digits,repeat = i): # формируем звёздочку
                ans += [int(’’.join(digit_1) + ’3579’ + ’’.join(digit_2) + ’6’ + ’’.join(digit_3))] # собираем по частям число, удовлетворяющее маске
count = 0 # итоговый счётчик
for x in sorted(set(ans)): # проход по множеству получившихся чисел
    if x <= 10**9 and x % 7 == 0: # если число не больше 10**9 и при этом кратно 7
        count += 1
print(count) # вывод ответа

Ответ: 1428

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

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

Налоговые вычеты

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

Специальное предложение
для учителей

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

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!