Задание 25. Информатика. ЕГЭ. Шастин. 29.08.2024

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

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

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

Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(21?3*145?5\) и делящиеся на \(2025\) без остатка.

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

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

Решение:

C++


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

using namespace std;

int32_t main() {
    long long n = 210314505;
    int r = n % 2025;
    n += r ? 2025 - r : 0; 

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

Ответ:
\(2123214525 \,\, 1048501\)
\(2163714525 \,\, 1068501\)
\(2173114575 \,\, 1073143\)