Здравствуйте! Будем тренироваться решать 22 задание из ЕГЭ по информатике 2021.
Двадцать второе задание требует от учащегося разбираться в программном коде. Код будет как всегда дан на 4 или 5 языках программирования.
Начнём!
Задача (стандартная)
Ниже на пяти языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 8, а потом 13.
Бейсик | Python |
---|---|
DIM X, M, L AS INTEGER INPUT X M = 0 L = 0 WHILE X > 0 M = M + X MOD 10 IF X MOD 10 > L THEN L = X MOD 10 END IF X = X \ 10 WEND PRINT L PRINT M |
x = int(input()) M = 0; L = 0 while x > 0: M = M + x % 10 if x % 10 > L: L = x % 10 x = x // 10 print(L) print(M) |
Паскаль | Алгоритмический язык |
var x, M, L: integer; begin readln(x); M := 0; L := 0; while x > 0 do begin M := M + x mod 10; if x mod 10 > L then L := x mod 10; x := x div 10 end; writeln(L); write(M) end. |
алг нач цел x, M, L ввод x M := 0 L := 0 нц пока x > 0 M := M + mod(x, 10) если mod(x, 10) > L то L := mod(x, 10) все x := div(x, 10) кц вывод L, нс, M кон |
Си++ | |
#include |
Решение:
Все задачи будем разбирать на языке паскаль.

Попробуем понять основную идею данной программы 22 задания из ЕГЭ по информатике 2021.
В начале ввели с клавиатуры какое-то число и положили его в переменную x.
Затем начинается ЦИКЛ while. Пока x > 0, будет выполняться тело ЦИКЛА.
Внутри ЦИКЛА к переменной M прибавляется с каждой итерацией ЦИКЛА последняя цифра введённого числа x.
Примечание:
Конструкция x mod 10 обозначает последнюю цифру.
Пример:
x := 17 ;
y := 17 mod 10 ;
В переменной y будет значение 7! Если 17 : 10 = 1 (ост. 7)
mod - это остаток от деления.
Далее идёт условие. Если последняя цифра x больше, чем предыдущее значение переменной L, то эта цифра становится новым значением переменной L.
Следующая и последняя команда внутри тела ЦИКЛА: x := x div 10, просто отбрасывает последнюю цифру числа x.
Примечание:
Конструкция x div 10 удаляет последнюю цифру.
Пример:
x := 17 ;
y := 17 div 10 ;
В переменной y будет значение 1! Если 17 : 10 = 1,7 - но дробную часть отбрасываем!
div - это целочисленное деление.
Подобные конструкции часто встречается в 22 задании ЕГЭ по информатике 2021.
Таким образом, мы берём последнюю цифру, прибавляем её к переменной M, а затем отбрасываем её. И так будет происходить, пока x > 0 (пока у числа будут цифры).
Ещё в переменной L окажется самая большая цифра числа x!!
По условии задачи L = 8, а M = 13. Т.е. самая большая цифра числа x должна быть 8, а сумма всех цифр числа x должна быть 13.
Наименьшее число x получается 58.
Ответ: 58
Рассмотрим следующую важную задачу из ЕГЭ информатике.
Задача (связь с системами счисления)
Ниже на четырёх языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: a и b. Укажите наименьшее из таких чисел x, при вводе которого алгоритм печатает сначала 3, а потом 2
Бейсик | Python |
---|---|
DIM X, A, B AS INTEGER INPUT X A=0: B=0 WHILE X > 0 A = A+1 IF B < (X MOD 8) THEN B = X MOD 8 END IF X = X \ 8 WEND PRINT A PRINT B |
x = int(input()) a = 0 b = 0 while x > 0: a += 1 if b < (x % 8): b =x % 8 x //= 8 print(a) print(b) |
Паскаль | Си++ |
var x, a, b: integer; begin readln(x); a:=0; b:=0; while x>0 do begin a:=a + 1; if b < (x mod 8) then b:=x mod 8; x:=x div 8; end; writeln(a); write(b); end. |
#include |
Решение:
В этой задаче внутри ЦИКЛа while к переменной a прибавляется 1 с каждой итерацией.
Так же есть условие, благодаря которому, в переменной b будет наибольший остаток от деления числа x на 8. Причём с каждой итерацией число x уменьшается целочислено в 8 раз! (ведь следующая команда идёт x:=x div 8).
Разгадка: Помните, как мы переводим в восьмеричную систему из десятичной системы ? Мы делим на 8 и собираем остатки! Здесь та же самая картина! Получается, что в выражении x mod 8 будут поочерди находится все цифры числа x в восьмеричной системе! А в переменной b окажется самая большая цифра числа x в восьмеричной системе.
Значит, мы должны составить переменную x сначала в восьмеричной системе, где самая большая цифра будет 2, а количество цифр будет 3 (переменная a).
Такое число будет x = 1028.
Переводим это число в нашу десятичную систему и запишем ответ. 1028 -> 6610.
Ответ: 66
Закрепим результаты по изучению 22 задания из ЕГЭ по информатике 2021
Задача (закрепление)
Ниже на пяти языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наибольшее из таких чисел x, при вводе которого алгоритм печатает сначала 2, а потом 5.
Бейсик | Python |
---|---|
DIM X, A, B AS INTEGER INPUT X A = 0: B = 1 WHILE X > 0 A = A+1 B = B * (X MOD 100) X = X\100 WEND PRINT A PRINT B |
x = int(input()) a, b = 0, 1 while x > 0: a = a + 1 b = b * x%100 x = x//100 print(a) print(b) |
Паскаль | Алгоритмический язык |
var x, a, b: integer; begin readln(x); a := 0; b := 1; while x > 0 do begin a := a+1; b := b*(x mod 100); x := x div 100; end; writeln(a); write(b); end. |
алг нач цел x, a, b ввод x a:=0; b:=1 нц пока x > 0 a := a+1 b := b*mod(x,100) x := div(x,100) кц вывод a, нс, b кон |
Си++ | |
#include |
Решение:
Эта задача похоже на предыдущую! Но теперь у нас выражение x mod 100 будет получать цифры 100-ричной системы числа x с каждой новой итерацией!
В переменной же b будет произведение всех цифр числа x в 100-ричной системе после окончания ЦИКЛА.
По условию задачи произведение цифр числа x в 100-ричной системе равно 5, а количество цифр равно 2 (за это отвечает переменная a). Нужно указать наибольшее число x! Нам подходит число 51100.
Переведём число 51100 в десятичную систему.
Ответ будет 501.
Ответ: 501
Задачи 22 задания из реального ЕГЭ по информатике.
Задача (ЕГЭ по информатике, 2019, Москва)
Ниже приведён алгоритм. Укажите наибольшее число x, при вводе которого алгоритм напечатает сначала 3, потом - 7.
Бейсик | Python |
---|---|
DIM X, L, M AS INTEGER INPUT X L = 0 M = 0 WHILE X > 0 M = M + 1 IF X MOD 2 <> 0 THEN L = L + 1 END IF X = X \ 2 WEND PRINT L PRINT M |
x = int(input()) M = 0 L = 0 while x > 0 M = M + 1 if x % 2 > 0: L = L + 1 x = x // 2 print(L) print(M) |
Паскаль | C++ |
var x, L, M : longint; begin readln(x); M := 0; L := 0; while x > 0 do begin M := M + 1; if x mod 2 > 0 then L := L + 1; x := x div 2; end; writeln(L); writeln(M); end. |
#include |
Решение:
Выражение x mod 2 может давать только два значения: либо 0, либо 1.
Следовательно, если остаток от деления x на 2 больше чем ноль, значит, в x mod 2 единица. Значит, в L подсчитывается количество единиц.
Переменная M подсчитывает количество всего итераций.
Если провести аналогию, что у нас есть число x в двоичной системе, то переменная L покажет, сколько в нём единиц, а переменная M - сколько всего разрядов в этом двоичном числе.
Нам нужно указать наибольшее x, где L = 3, а M = 7.
Получается, что такое число x будет 11100002. Если его перевести в десятичную систему, то получится 112!
Ответ: 112
Задача (ЕГЭ по информатике, 2020, Москва)
Ниже приведён алгоритм. Укажите наибольшее число x, при вводе которого алгоритм напечатает сначала 3, потом 6.
Бейсик | Python |
---|---|
DIM X, L, M AS INTEGER INPUT X M = 0 L = 1 WHILE X > 0 M = M + 1 IF X MOD 2 = 0 THEN L = L * (X MOD 8) END IF X = X DIV 8 WEND PRINT M PRINT L |
x = int(input()) M = 0 L = 1 while x > 0: M = M + 1 if x % 2 = 0: L = L * (x % 8) x = x // 8 print(M) print(L) |
Паскаль | C++ |
var x, L, M : longint; begin readln(x); M := 0; L := 1; while x > 0 do begin M := M + 1; if x mod 2 = 0 then L := L * (x mod 8); x := x div 8; end; writeln(M); writeln(L); end. |
#include |
Решение:
Структура программы похожа на те, которые мы уже рассматривали!
Связка выражений x mod 8 и x div 8 подсказывает нам, что мы сначала должны подобрать x в восьмеричной системе!
В переменной L после выполнения всего ЦИКЛа будет произведение цифр числа x записанное в восьмеричной системе, но не всех, а только тех, которые равны 2, 4 или 6. Ведь команда L := L * (x mod 8); выполняется, если x нацело делится на 2!
Если x нацело делится на 2 (остаток от деления на 2 равен нулю), то остатки от деления на 8 могут быть:
10 : 8 = 1 (ост. 2)
12 : 8 = 1 (ост. 4)
14 : 8 = 1 (ост. 6)
16 : 8 = 2 (ост. 0)
Дальше остатки будут повторяться!
Ноль не может быть в нашем числе x записанное в восьмеричной системе, потому что, тогда бы, произведение цифр сразу стало бы равно нулю, а у нас переменная L = 6.
Переменная M характеризует количество цифр всего в числе x записанное в восьмеричной системе.
Итак, длина числа в восьмеричной системе должна равняться 3, а произведение цифр, которые могут быть равны 2, 4, 6 равно 6.
Если цифры не равны 2, 4, или 6, то они не участвуют в произведении и в формировании переменной L.
Нужно указать наибольшее число. В начале была L = 1. Получается, что в числе x8 только одна цифра 6 (1 * 6 = 6). Больше никак не получить произведение цифр равное 6, причём, чтобы множители можно было выбирать из цифр 2, 4, 6.
Таким образом, x8 = 7768. Это число трёхзначное, первые две цифры берём по максимуму, и так же должна обязательна быть цифра 6.
Переведём это число в десятичную систему. 7768 -> 51010.
Ответ: 510
Оставить коментарий: