Задание 22(20) к ЕГЭ по информатике
Пример 1
Ниже (на одном из пяти языков программирования) записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M. Укажите наибольшее число x, при вводе которого алгоритм печатает сначала 3, а потом 6.
var x, L, M: integer;
begin
readln(x);
L := 0; M := 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.
Что делает данная программа?
x := x div 2; Команда показывает что число может быть представлено в двоичной системе счисления
M := M + 1; Команда показывает, сколько раз выполнился цикл-пока, т. е. сколько может быть цифр в двоичной записи числа Х.
В команде if x mod 2 <> 0 then L := L + 1; вычисляется количество единиц входящих в двоичную запись числа Х. Т.о. надо найти в двоичной системе счисления наибольшее шестизначное число, в котором три единицы, т. е. Х=1110002=1*25+1*24+1*23+0*22+0*21+0*20=32+16+8=56,
Ответ: 56.
Если бы нужно было указать наименьшее число х, то мы бы взяли х=1000112=32+2+1=35
Пример 2
Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 120.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=1;
while x > 0 do begin
L:=L+1;
M:= M*(x mod 8);
x:= x div 8;
end;
writeln(L); write(M);
end.
В этой программе цикл повторяется 3 раза. Команда x:= x div 8 показывает, что число переводится в восьмеричную систему счисления. По команде M:= M*(x mod 8) вычисляется произведение цифр полученного числа, которое по условию равно 120. Представим число 120 в виде произведения трех множителей: 120=8*5*3=6*5*4. Т.к. в восьмеричной системе счисления наибольшая цифра 7, то выберем 120=6*5*4. Т.о получим наибольшее число в восьмеричной системе счисления 654, осталось перевести его в десятичную систему счисления
654=6*82+5*81+4*80=6*64+5*8+4=384+40+4=428
Ответ: 428