
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.174] |
![]() |
|
Сообщ.
#1
,
|
|
|
ЕГЭ по информатике 2020, вариант Москва
Часть 1, № 20 Анализ алгоритма с циклами и условные операторы Задание взято с сайта http://kotolis.ru/realegeinf_2020 Условие. Ниже приведён алгоритм. Укажите наибольшее x, при вводе которого алгоритм напечатает сначала 3, потом – 6. ![]() Решение. Программа на Паскале: 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. В алгоритме используется остаток от деления на 8, а при каждом проходе цикла x нацело делится на 8. Эти действия удобно рассмотреть в восьмеричной записи числа: остаток от деления на 8 показывает последнюю цифру восьмеричной записи, а целое деление на 8 отбрасывает эту цифру. В результате работы алгоритма значением переменной M будет количество цифр в восьмеричной записи числа x, а значением переменной L будет произведение чётных цифр, имеющихся в этой записи. По условию исходное число должно быть максимальным. Максимальное трёхзначное число в восьмеричной системе 7778 =83 – 1 = 29 – 1 = 512 – 1 = 51110. По условию нечётные цифры в записи пропускаются, а чётные умножаются на произведение. В результате получается произведение, равное 6. 6 нельзя представить как произведение двух или трёх чётных цифр, поэтому в записи этого максимального числа одна цифра 6 и две максимальные нечётные цифры 7. Это число 7768 =7778 – 1 = 51110 – 1 = 510. Ответ: 510 . |