Задание 25. Информатика. ЕГЭ. Демо-2025-2

Просмотры: 166
Изменено: 24 ноября 2024

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

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

Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\). Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(3?12?14*5\), делящиеся на \(1917\) без остатка.

В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на \(1917\).

Количество строк в таблице для ответа избыточно.

Решение:

C++


#include<iostream>
#include<string>
#include<fnmatch.h>

using namespace std;

int32_t main() {
    long long n = 30120145;
    n += n % 1917 ? 1917 - n % 1917 : 0;

    for(; n < 10ll * 1000 * 1000 * 1000; n += 1917)
        if (!fnmatch("3?12?14*5", to_string(n).c_str(), 0))
            cout << n << " " << n / 1917 << '\n';

}

Ответ:
\(351261495 \,\, 183235\)
\(3212614035 \,\, 1675855\)
\(3412614645 \,\, 1780185\)
\(3712414275 \,\, 1936575\)
\(3912414885 \,\, 2040905\)