menu
person

Задача №2856

Ниже за­пи­са­на про­грам­ма. По­лу­чив на вход число x , эта про­грам

Поиск задачи:

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

 

var x, L, M: integer;

begin

    readln(x);

    L:=0; M:=0;

    while x > 0 do begin

        L:= L + 1;

        if x mod 2 = 1 then

            M:= M + (x mod 10) div 2;

        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 = 1 then

M:= M + (x mod 10) div 2;

end;

 

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

 

x mod 10 при­ни­ма­ет зна­че­ния от 0 до 9, сле­до­ва­тель­но, (x mod 10) div 2 — от 0 до 4. От­сю­да сле­ду­ет, что для по­лу­че­ния числа 7 нужно не менее двух сл­га­е­мых, по­лу­чен­ных в цикле как (x mod 10) div 2. Для этого не­об­хо­ди­мо, чтобы хотя бы две цифры в числе x были нечётными.

 

Пред­ста­вим 7 в виде: 7 = 4 + 3.

 

Для по­лу­че­ния наи­мень­ше­го x по­ло­жим первую цифру x(1) = 1, она даст вклад 0 на тре­тьем шаге цикла, а вто­рую цифру x(2) = 7, она даст вклад 3 на вто­ром шаге цикла. Остаётся сде­лать x(3) = 9, и по­лу­чим окон­ча­тель­ный ответ: x = 179.

 

Ответ: 179.

Категория: по информатике | Добавил: Просмотров: 1 | Теги: Ана­лиз программы с цик­ла­ми | Рейтинг: 0.0/0
Всего комментариев: 0