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

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

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

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

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

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

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

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

count = 0
for x in range(8290175,10**9+1,31): # для оптимизации делаем цикл с шагом 31 с числа кратного 31, таким образом, мы будем проходиться только по кратным 31 числам
    n = str(x)
    if ’17’ in n[-3:-1] and ’829’ in n[-7:-4]: # проверка, что число удовлетворяет маске
        count += 1
print(count)

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