πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №25 → Задание i25-01

Задание №25 ЕГЭ Информатика с ответом и решением

Ответ: 123450798 5367426 123451718 5367466 123453788 5367556 123454708 5367596 123456778 5367686 123459768 5367816

Условие

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

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

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

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

Среди натуральных чисел, не превышающих 109, найдите все числа, соответствующие маске 12345?7?8, делящиеся на число 23 без остатка.

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

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

Подсказки — как подойти к решению

  1. Задание решается перебором, но перебирать все натуральные числа подряд долго: выбирай между перебором только чисел, подходящих под маску, и перебором только чисел, кратных делителю. Оцени, каких кандидатов получится меньше, и иди этим путём.
  2. Разбери маску посимвольно: «?» — ровно одна любая цифра, «*» — любая последовательность цифр, в том числе пустая. Здесь звёздочки нет, значит маска жёстко задаёт и число разрядов, и границы диапазона кандидатов — найди их до начала перебора.
  3. На последнем шаге для каждого кандидата проверь делимость без остатка и выведи подряд два значения: само число, а за ним результат деления на делитель. Строки таблицы располагай по возрастанию чисел.

Решение

Решим данную задачу методом перебора. Заметим, что маске «12345?7?8» соответствуют числа от 123450708 до 123459798. Для каждого числа будем проверять, что третья справа цифра равна 7 и последняя цифра числа равна 8. Для каждого такого числа будем проверять, кратно ли оно 23, если число кратно 23 — будем выводить его на экран, а также результат деления этого числа на 23.

Приведём решение на языке Pascal.

var

i: longint;

begin

for i := 123450708 to 123460000 do begin

if (((i mod 1000) div 100) = 7) and (i mod 10 = 8) then

if i mod 23 = 0 then writeln(i, ' ', i div 23);

end;

end.

Приведём решение на языке Python.

for i in range(123450708,123460000):

if (i%23==0) and (i%10==8) and ((i//100)%10==7):

print(i, i//23)

В результате работы программа должна вывести следующее:

123450798 5367426

123451718 5367466

123453788 5367556

123454708 5367596

123456778 5367686

123459768 5367816

Приведём решение Вагнерова Ивана на языке Python.

from fnmatch import *

for x in range(0,10**9,23):

if fnmatch(str(x), '12345?7?8'):

print(x, x//23)

Приведём решение Юрия Красильникова на языке Python.

d = '0123456789'

ans = sorted([int(f'12345{x}7{y}8') for x in d for y in d])

for x in ans:

if x%23==0:

print(x,x//23)

Приведём решение Сергея Донец на PascalABC.NET:

begin

var x:=123450708;//maska минимальная 12345?7?8

var d:=23;//шаг = делитель

var start:=x+(d-x mod d) mod d;// первое число >= x, кратное шагу

var finish:=123459798;//maska максимальная 12345?7?8

for var i:=start to finish step d do

if i.tostring.IsMatch('^12345.7.8$') then

Println(i,i/23);

end.

Типичные ошибки

Решить это задание в тренажёре

В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №25 по информатике