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

25.03 Маски

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

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

Задача 21#33621Максимум баллов за задание: 1

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

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

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

Среди натуральных чисел, не превышающих 108  , найдите все числа, соответствующие маске 12  *4  ?65  и делящиеся на 141  без остатка.

В ответе запишите количество найденных чисел.

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

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

count = 0
for x in "1234567890":
    count += (int("12" + "4" + x + "65") % 141 == 0) # проверка, что число удовлетворяет маске с пустой звёздочкой
    for y in "1234567890":
        count += (int("12" + y + "4" + x + "65") % 141 == 0) # проверка, что число удовлетворяет маске с одним символом в звёздочке
        for z in "1234567890":
            count += (int("12" + y + z + "4" + x + "65") % 141 == 0) # проверка, что число удовлетворяет маске с двумя символами в звёздочке
print(count)

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

count = 0
for x in range(124080,10**8+1,141): # для оптимизации делаем цикл с шагом 141 с числа кратного 141, таким образом, мы будем проходиться только по кратным 141 числам
    n = str(x)
    if ’12’ in n[:2] and n[-4] == ’4’ and ’65’ in n[-2:]: # проверка, что число удовлетворяет маске
        count += 1
print(count)

Ответ: 8

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

Задача 22#52657Максимум баллов за задание: 1

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

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

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

Среди натуральных чисел, не превышающих 106  , найдите все числа, соответствующие маске 8  ?321  ? и делящиеся на 5  без остатка. В ответе запишите количество найденных чисел

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

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

ans = 0
for x in range(10):
    for i in [0, 5]:
        #любое число, оканчивающееся на 0 или 5, делится на 5
        ans += 1
print(ans)

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

count = 0
for x in range(803210,10**6+1,5): # для оптимизации делаем цикл с шагом 5 с числа кратного 5, таким образом, мы будем проходиться только по кратным 5 числам
    n = str(x)
    if n[0] == ’8’ and ’321’ in n[2:5]: # проверка, что число удовлетворяет маске
        count += 1
print(count)

Ответ: 20

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

Задача 23#52658Максимум баллов за задание: 1

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

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

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

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

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

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

ans = 0
for x in range(10): # перебор вопроса
    for i in range(10): # перебор вопроса
        n = int(’9’ + str(x) + ’123’ + str(i)) # составляем число, удовлетворяющее маске
        if n % 7 == 0:
            ans += 1
print(ans)

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

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

Ответ: 14

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

Задача 24#52661Максимум баллов за задание: 1

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

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

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

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

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

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

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

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

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

Ответ: 15

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

Задача 25#52665Максимум баллов за задание: 1

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

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

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

Среди натуральных чисел, не превышающих 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

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

Задача 26#54980Максимум баллов за задание: 1

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

– символ "?"означает ровно одну произвольную цифру

– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность

Среди натуральных чисел, не превышающих 107  найдите все числа, соответствующие маске 1*2?3*5, делящиеся на 123 и на 17 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания через пробел.

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

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

# тройки чисел, которые могут быть в числе, удовлетворяющем маске
# для оптимизации делаем цикл с шагом 2091 с числа кратного 2091, таким образом, мы будем проходиться только по кратным 2091 числам(НОК 123 и 17 равен 2091)
for i in range(123 * 17, 10 ** 7, 2091):
    s = str(i)
    if s[0] == ’1’ and s[-1] == ’5’ and len(s) > 4: # если число частично удовлетворяет маске
        fl = False
        for j in range(1, len(s) - 1): # проходимся по центру числа
            t = s[j:j + 3] # проверяем тройку подряд идущих символов
            if t[0] == ’2’ and t[-1] == ’3’: # если первый символ равен 2, а последний - 3 в текущей тройке
                fl = True # значит, что число полностью удовлетворяет маске
                break
        if fl:
            print(i, end=’ ’)

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

m = [’203’,’213’,’223’,’233’,’243’,’253’,’263’,’273’,’283’,’293’] # тройки чисел, которые могут быть в числе, удовлетворяющем маске
# для оптимизации делаем цикл с шагом 2091 с числа кратного 2091, таким образом, мы будем проходиться только по кратным 2091 числам(НОК 123 и 17 равен 2091)
for x in range(12546,10**7+1,2091):
    n = str(x)
    if n[0] == ’1’ and n[-1] == ’5’: # проверяем, что число удовлетворяет маске
        if any(i in n for i in m): # если хотя бы одна из троек символов есть в числе, значит, число полностью удовлетворяет маске
            print(x)

Ответ: 1223235 1432335

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

Задача 27#54981Максимум баллов за задание: 1

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

– символ "?"означает ровно одну произвольную цифру

– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность

Среди натуральных чисел, не превышающих 107  найдите все числа, соответствующие маске 8?0*191, кратных на 19 и не кратных 2. В ответе запишите найденные числа в порядке возрастания найденных чисел, через пробел.

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

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

# пустая звёздочка
for i in ’0123456789’:
    s = ’8’ + i + ’0191’ # составляем число, удовлетворяющее маске
    if int(s) % 19 == 0 and int(s) % 2 != 0:
        print(s, end=’ ’)
    for j in ’0123456789’: # одна цифра в звёздочке
        t = s[:3] + j + s[3:] # составляем число, удовлетворяющее маске
        if int(t) % 19 == 0 and int(t) % 2 != 0:
            print(t, end=’ ’)

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

# для оптимизации делаем цикл с шагом 38 с нечётного числа кратного 19, таким образом, мы будем проходиться только по кратным 19 числам и не кратным 2
for x in range(800223,10**7+1,38):
    n = str(x)
    if n[0] == ’8’ and n[2] == ’0’ and ’191’ in n[-3:]: # проверяем, что число удовлетворяет маске
        print(x)

Ответ: 8105191 8200191 8409191 8504191 8808191 8903191

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

Задача 28#54984Максимум баллов за задание: 1

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

– символ "?"означает ровно одну произвольную цифру

– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность

Среди натуральных чисел, не превышающих 107  , найдите все числа, соответствующие маске 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) # Выводим подходящие числа

Ответ: 9575193 9585183 9595173 9605163 9615153 9625143 9635133 9645123 9655113 9665103

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

Задача 29#56326Максимум баллов за задание: 1

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

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

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

Среди натуральных чисел, не превышающих 107  , найдите все числа, соответствующие маске ?123 ∗1  и делящиеся на 11  без остатка. В ответе запишите количество найденных чисел.

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

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

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

Решение используя itertools

from itertools import product
ans = 0
for i in range(1, 10): # симулируем вопрос
    for k in range(0, 3):
        for j in product(’0123456789’, repeat=k): # симулируем звёздочку
            s = str(i) + ’123’ + ’’.join(j) + ’1’ # составляем число, удовлетворяющее маске
            if int(s) % 11 == 0:
                ans += 1
print(ans)

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

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

Ответ: 91

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

Задача 30#57989Максимум баллов за задание: 1

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

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

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

Например, маске 645*8?5 соответствуют числа 645835 и 64500835.

Среди натуральных чисел, не превышающих 108  , найдите все числа, соответствующие маске 34?8?97 и делящиеся на 29 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на 29.

Формат записи ответа: Найденное_число1 частное_от_деления_на_29_1 Найденное_число2 частное_от_деления_на_29_2 и тд.

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

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

Сначала мы перебираем все возможные варианты для каждой позиции, где в маске стоит символ «?».

1. Для первого вопросительного знака мы пробегаемся по всем цифрам от 0 до 9.

2. Для второго вопросительного знака также перебираем цифры от 0 до 9.

3. На каждой итерации мы собираем строку, которая соответствует числу, вставляя выбранные цифры на места «?».

4. Полученную строку преобразуем в целое число.

5. Проверяем делимость этого числа на 29. Если условие выполняется, печатаем само число и результат деления на 29.

for a1 in ("0123456789"):  # Перебираем все цифры для первого ’?’
    for a2 in ("0123456789"):  # Перебираем все цифры для второго ’?’
        s = "34" + a1 + "8" + a2 + "97"  # Составляем строку числа
        n = int(s)  # Преобразуем строку в число
        if n % 29 == 0:  # Проверяем, делится ли число на 29
            print(n, n // 29)  # Выводим число и частное

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

В этом подходе мы используем встроенный модуль fnmatch, который позволяет сравнивать строки с шаблонами, содержащими символы «?» и «*».

1. Ограничиваем диапазон проверки числами от 3 000 000 до 4 000 000, так как маска «34?8?97» задаёт числа именно в этом промежутке.

2. Для каждого числа из диапазона преобразуем его в строку и проверяем, подходит ли оно под маску «34?8?97».

3. Если число подходит и делится на 29 без остатка, выводим его и частное.

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *

# Нет смысла рассматривать числа вне данного промежутка,
# т.к они точно не подойдут
for i in range(3000000, 4000000):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), "34?8?97") and i % 29 == 0:
        print(i, i // 29)

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

Здесь мы используем оптимизацию: перебираем только числа, кратные 29.

1. Для этого начинаем цикл с числа 3 408 109 (это ближайшее к маске число, которое делится на 29) и идём до  107  , увеличивая шаг на 29.

2. Каждое число переводим в строку.

3. Проверяем условия маски:

1) первые две цифры равны «34»;

2) четвёртая цифра равна «8»;

3) последние две цифры равны «97».

4. Если все условия выполняются, выводим число и частное от деления.

# для оптимизации пишем цикл с шагом 29, начиная с числа кратного 29,
# таким образом, мы будем проходиться только по кратным 29 числам
for x in range(3408109, 10**7 + 1, 29):
    n = str(x)
    if "34" in n[:2] and n[3] == "8" and "97" in n[-2:]:  # проверяем маску
        print(x, x // 29)

Ответ: 3418897 117893 3468197 119593 3488497 120293

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

Задача 31#57990Максимум баллов за задание: 1

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

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

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

Например, маске 645*8?5 соответствуют числа 645835 и 64500835.

Среди натуральных чисел, не превышающих 105  , найдите все числа, соответствующие маске *9*270* и делящиеся на число 34 без остатка. В ответе запишите пары чисел (найденное число и соответствующие ему частное от деления на 34 через пробел), пары расположите в порядке возрастания найденных чисел, друг от друга их отделите также через пробел.

Формат ввода ответа: Найденное_число_1 частное_от_деления_на_34_1 Найденное_число_2 частное_от_деления_на_34_2 и тд.

Показать ответ и решение
# Импортируем модуль fnmatch для нужной функции
from fnmatch import *
# для оптимизации делаем цикл с шагом 34, начиная с числа кратного 34, для того чтобы проходиться по числам кратным 34
for i in range(9282,10**5,34):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’*9*270*’):
        print(i, i//34)

Ответ: 39270 1155 90270 2655

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

Задача 32#57991Максимум баллов за задание: 1

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

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

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

Например, маске 645*8?5 соответствуют числа 645835 и 64500835.

Среди натуральных чисел, не превышающих 106  , найдите все числа, соответствующие маске 3*4?7?9, делящиеся на число 37 без остатка. В ответе запишите пары чисел (найденное число и соответствующие ему частное от деления на 37 через пробел), пары расположите в порядке возрастания найденных чисел, друг от друга их отделите также через пробел.

Формат ввода ответа: найденное_число_1 частное_от_деления_на_37_1 найденное_число_2 частное_от_деления_на_37_2 и тд.

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

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

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *
# для оптимизации делаем цикл с шагом 37, начиная с числа кратного 37, для того чтобы проходиться по числам кратным 37
for i in range(340733,10**6+1,37):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’3*4?7?9’):
        print(i, i//37)

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

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

Ответ: 341769 9237 344729 9317 348799 9427

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

Задача 33#57992Максимум баллов за задание: 1

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

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

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

Например, маске 645*8?5 соответствуют числа 645835 и 64500835.

Среди натуральных чисел, не превышающих 1010  , найдите все числа, соответствующие маске 21?498*4*, делящиеся на 12345 без остатка. В ответе запишите пары чисел (найденное число и соответствующие ему частное от деления на 12345 через пробел), пары расположите в порядке возрастания найденных чисел, друг от друга их отделите также через пробел.

Формат ввода ответа: найденное_число_1 частное_от_деления_на_12345_1 найденное_число_2 частное_от_деления_на_12345_2 и тд.

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

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

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *

# Диапазон чисел очень большой,
# и чтобы не ждать, можно выставить шаг в цикле как 12345/
# Таким образом цикл быстро пройдёт, и даже не придётся проверять число на кратность,
# т.к. все числа в цикле кратны 12345 из-за шага в 12345
# (главное начать цикл либо с нуля, либо с кратного числа)
for i in range(12345, 10**10, 12345):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’21?498*4*’):
        print(i, i//12345)

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

# для оптимизации делаем цикл с шагом 12345, начиная с числа кратного 12345, для того чтобы проходиться по числам кратным 12345
for x in range(2110995,10**10+1,12345):
    n = str(x)
    if ’21’ in n[:2] and ’498’ in n[3:6] and ’4’ in n[6:]: # проверяем, что число удовлетворяет маске
        print(x,x//12345)

Ответ: 2114982435 171323

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

Задача 34#57993Максимум баллов за задание: 1

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

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

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

Например, маске 645*8?5 соответствуют числа 645835 и 64500835.

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

Формат ввода ответа: Число1 ПРОБЕЛ ЧастноеОтДеленияНа215Числа1 ПРОБЕЛ Число2 ПРОБЕЛ ЧастноеОтДеленияНа215Числа2 и т.д.

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

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

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *

# Диапазон чисел очень большой,
# и чтобы не ждать, можно выставить шаг в цикле как 215.
# Таким образом цикл быстро пройдёт, и даже не придётся проверять число на кратность,
# т.к. все числа в цикле кратны 215 из-за шага в 215
# (главное начать цикл либо с нуля, либо с кратного числа)
for i in range(215, 10**9, 215):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’589?132*’):
        print(i, i//215)

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

# для оптимизации делаем цикл с шагом 12345, начиная с числа кратного 12345, для того чтобы проходиться по числам кратным 12345
for x in range(5890140,10**9+1,215):
    n = str(x)
    if ’589’ in n[:3] and ’132’ in n[4:7]: # проверка, что число удовлетворяет маске
        print(x,x//215)

Ответ: 589313280 2740992 589413255 2741457 589513230 2741922 589613205 2742387

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

Задача 35#60996Максимум баллов за задание: 1

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

– символ "?"означает ровно одну произвольную цифру

– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность

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

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

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

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *
# для оптимизации делаем цикл с шагом 2409, начиная с числа кратного 2409, для того чтобы проходиться по числам кратным 2409
for i in range(79497,10**6 + 1,2409):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’7*9??*1’):
        print(i)

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

m = [str(i) for i in range(900,1000)] # комбинации из трёх цифр, которые могут быть в числе полностью удовлетворяющим маске
# для оптимизации делаем цикл с шагом 2409, начиная с числа кратного 2409, для того чтобы проходиться по числам кратным 2409
for x in range(79497,10**6+1,2409):
    n = str(x)
    if n[0] == ’7’ and n[-1] == ’1’: # проверяем, что число частично удовлетворяет маске
        if any(i in n[1:-1] for i in m): # проверяем, что число полностью удовлетворяет маске
            print(x)

Ответ: 792561

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

Задача 36#60997Максимум баллов за задание: 1

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

– символ "?"означает ровно одну произвольную цифру

– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность

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

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

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

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *
# для оптимизации делаем цикл с шагом 126, начиная с числа кратного 126, для того чтобы проходиться по числам кратным 126
for i in range(14238,10**6 + 1,126):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’?4*2?6’) and i % 19 != 0:
        print(i)

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

# для оптимизации делаем цикл с шагом 126, начиная с числа кратного 126, для того чтобы проходиться по числам кратным 126
for x in range(14238,10**6+1,126):
    n = str(x)
    if n[1] == ’4’ and n[-1] == ’6’ and n[-3] == ’2’ and x % 19 != 0: # проверяем, что число удовлетворяет маске и при не кратно 19
        print(x)

Ответ: 44226 146286 342216 347256 444276 541296 640206 645246 742266 846216 948276

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

Задача 37#61000Максимум баллов за задание: 1

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

– символ "?"означает ровно одну произвольную цифру

– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность

Среди натуральных чисел, не превышающих 106  найдите все числа, соответствующие маске 5??1*?0, кратных 95 при этом содержащих ровно 1 пятерку, ровно 1 единицу и ровно 1 ноль. В ответе запишите все найденные числа в порядке возрастания через пробел.

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

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

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *

for i in range(500175,10**6 + 1,95):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’5??1*?0’) \
            and str(i).count(’5’) == 1 \
            and str(i).count(’1’) == 1 \
            and str(i).count(’0’) == 1:
        print(i)

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

# для оптимизации делаем цикл с шагом 95, начиная с числа кратного 95, для того чтобы проходиться по числам кратным 95
for x in range(500175,10**6+1,95):
    n = str(x)
    if n[0] == ’5’ and n[3] == ’1’ and n[-1] == ’0’: # проверки, что число удовлетряет маске и условию
        if n.count(’5’) == 1 and n.count(’1’) == 1 and n.count(’0’) == 1:
            print(x)

Ответ: 522120 532190 533140 536180 537130 544160 563160 574180 578170 579120 582160 589190 593180 594130 597170 598120

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

Задача 38#61004Максимум баллов за задание: 1

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

– символ "?"означает ровно одну произвольную цифру

– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность

Среди натуральных чисел, не превышающих 106  найдите все числа, соответствующие маске 5*9?*2?, кратных 61 и не кратных 2 и 19. В ответе запишите все найденные числа в порядке возрастания через пробел.

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

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

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *
# для оптимизации делаем цикл с шагом 61, начиная с числа кратного 61, для того чтобы проходиться по числам кратным 61
for i in range(59231,10**6 + 1,61):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’5*9?*2?’) \
            and i % 2 != 0 \
            and i % 19 != 0:
        print(i)

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

m = [str(i) for i in range(90,100)] # комбинации, которые могут быть в числе, удовлетворяющем маске
# для оптимизации делаем цикл с шагом 61, начиная с числа кратного 61, для того чтобы проходиться по числам кратным 61
for x in range(59231,10**6+1,61):
    n = str(x)
    if n[0] == ’5’ and n[-2] == ’2’: # проверка, что число частично удовлетворяет маске
        if any(i in n[1:-2] for i in m) and x % 2 !=0 and x % 19 != 0: # проверка, что число полностью удовлетворяет маске и выполняет условия
            print(x)

Ответ: 539423 549427 569923 579927 589321 591029 592127 593225 594323 595421 597129 598227 599325

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

Задача 39#61234Максимум баллов за задание: 1

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

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

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

Среди натуральных чисел, не превышающих 107  , найдите все числа, соответствующие маске *6*?3*96 и делящиеся на 2048 без остатка. В ответе запишите для всех чисел пары: число и соответствующее ему частное от деления на 2048 через пробел. Пары расположите в порядке возрастания числа, друг от друга пары также отделите пробелом.

Пример ввода ответа: 4096 2 10240 5.

Показать ответ и решение
# Импортируем модуль fnmatch для нужной функции
from fnmatch import *

# Диапазон чисел очень большой,
# и чтобы не ждать, можно выставить шаг в цикле как 2048/
# Таким образом цикл быстро пройдёт, и даже не придётся проверять число на кратность,
# т.к. все числа в цикле кратны 2048 из-за шага в 2048
# (главное начать цикл либо с нуля, либо с кратного числа)
for i in range(2048, 10**7 + 1, 2048):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’*6*?3*96’):
        print(i, i//2048)

Ответ: 1693696 827 4663296 2277 6813696 3327

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

Задача 40#61236Максимум баллов за задание: 1

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

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

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

Среди натуральных чисел, не превышающих 106  , найдите все числа, соответствующие маске 56??3*9 и делящиеся на 49 без остатка. В ответе попарно запишите все найденные числа в порядке возрастания, и через пробел — соответствующие им частные от деления на 49. Каждую пару так же отделите друг от друга пробелом.

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

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

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *
# для оптимизации делаем цикл с шагом 49, начиная с числа кратного 49, для того чтобы проходиться по числам кратным 49
for i in range(560070,10**6 + 1,49):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’56??3*9’):
        print(i, i//49)

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

# для оптимизации делаем цикл с шагом 49, начиная с числа кратного 49, для того чтобы проходиться по числам кратным 49
for x in range(560070,10**6+1,49):
    n = str(x)
    if ’56’ in n[:2] and n[-1] == ’9’ and n[4] == ’3’: # проверка, что число удовлетворяет маске
        print(x,x//49)

Ответ: 564039 11511 568939 11611
Рулетка
Вы можете получить скидку в рулетке!