Будьте внимательны! Проект находится в тестовой эксплуатации!
Играй - Развивайся - Поступай в ТПУ
Информатика

Раздел: Информатика / 1. Информация и информационные процессы / 1.6. Элементы теории алгоритмов / 1.6.3. Построение алгоритмов и практические вычисления

Вопрос №:  14796

Ниже за­пи­са­на про­грам­ма. По­лу­чив на вход число x , эта про­грам­ма пе­ча­та­ет два числа, L и M. Ука­жи­те наи­боль­шее из таких чисел x, при вводе ко­то­рых ал­го­ритм пе­ча­та­ет сна­ча­ла 3, а потом 0.

 var x, L, M: integer;
 begin
     readln(x);
     L:=0; M:=0;
     while x > 0 do begin
         L:= L + 1;
         if x mod 2 = 0 then
             M:= M + x mod 10;
         x:= x div 10;
     end;
     writeln(L); write(M);
 end.

Впишите свой вариант ответа:

Рас­смот­рим цикл, число шагов ко­то­ро­го за­ви­сит от из­ме­не­ния пе­ре­мен­ной x:

while x > 0 do begin
...
x:= x div 10;
end;

Т. к. опе­ра­тор div остав­ля­ет толь­ко целую часть от де­ле­ния, то при де­ле­нии на 10 это рав­но­силь­но от­се­че­нию по­след­ней цифры.

Из при­ве­ден­но­го цикла видно, что на каж­дом шаге от де­ся­тич­ной за­пи­си x от­се­ка­ет­ся по­след­няя цифра до тех пор, пока все цифры не будут от­се­че­ны, то есть x не ста­нет равно 0; по­это­му цикл вы­пол­ня­ет­ся столь­ко раз, сколь­ко цифр в де­ся­тич­ной за­пи­си вве­ден­но­го числа, при этом число L столь­ко же раз уве­ли­чи­ва­ет­ся на 1. Сле­до­ва­тель­но, ко­неч­ное зна­че­ние L сов­па­да­ет с чис­лом цифр в x. Для того, чтобы L стало L=3, x долж­но быть трёхзнач­ным.

Те­перь рас­смот­рим опе­ра­тор из­ме­не­ния M:

if x mod 2 = 0 then
  M:= M + x mod 10;
end;

Опе­ра­тор mod остав­ля­ет толь­ко оста­ток от де­ле­ния, при де­ле­нии на 10 это по­след­няя цифра x.

Чтобы зна­че­ние M оста­лось ну­ле­вым, нужно, чтобы усло­вие x mod 2 = 0 не вы­пол­ня­лось, либо чтобы вы­пол­ня­лось x mod 10 = 0. А зна­чит, все цифры этого числа могут быть либо нечётными, либо пер­вая цифра нечётная и остль­ные нули. Но мы ищем мак­си­ма­льое x, по­это­му ис­ко­мое число 999.

Ответ: 999.