Задача к ЕГЭ по информатике на тему «Маски» №4

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

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

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

Сколько существует натуральных чисел, не превышающих 109  , соответствующих следующей маске 1  *23  ?34  и их сумма цифр делилась на 9  . В ответ запишите количество таких чисел.

Примечание. Если сумма цифр числа делится на 9, то и само число делится на 9.

Решение через срезы

count = 0 # Количество подходящих чисел
# Будем перебирать числа, которые сразу оканчиваются на 34
for i in range(34, 10**9+1, 100):
    s = str(i)
    if i % 9 == 0: # Сумма цифр кратна 9, если число кратно 9
        if s[0] == ’1’ and s[-5:-3] == ’23’: # Проверяем оставшуюся маску
            count += 1
print(count)

Решение через ручное составление

ans = 0
for j in range(10):
    # пустая звёздочка
    s = "123" + str(j) + "34" # составляем слово
    if int(s) % 9 == 0:
        ans += 1
    #односимвольная звёздочка
    for w in range(10):
        s1 = "1" + str(w) + "23" + str(j) + "34" # составляем слово
        if int(s1) % 9 == 0:
            ans += 1
    #двухсимвольная звёздочка
    for w in range(10):
        for z in range(10):
            s2 = "1" + str(w) + str(z) + "23" + str(j) + "34" # составляем слово
            if int(s2) % 9 == 0:
                ans += 1
    #трехсимвольная звёздочка
    for w in range(10):
        for z in range(10):
            for k in range(10):
                s3 = "1" + str(w) + str(z) + str(k) + "23" + str(j) + "34" # составляем слово
                if int(s3) % 9 == 0:
                    ans += 1
print(ans)

Ответ: 1234
Оцените статью
Я решу все!