Задание 6. Массив содержит информацию о стоимости 20 товаров в магазине (случайные числа от 1 до 50). Склавиатуры вводятся коли
чество товаров, которые приобретает покупатель, и номера приобрета
емых товаров. Составьте программу для нахождения стоимости по-
купки.
(Pascal ABC)
Объяснение:
procedure F(n: integer);
begin
if n>0 then begin
Write (n);
F(n-2);
F(n div 4);
end
end;
begin
F(9);
end.
На выходе будет 97531112
Если нужна трассировка, её можно сделать примерно так:
procedure F(n: integer);
begin
Writeln('Вход');
if n>0 then begin
Writeln ('В выходную строку: ',n);
Writeln('Вызов F(n-2)');
F(n-2);
Writeln('Вызов F(n div 4)');
F(n div 4);
end;
Writeln('Выход')
end;
begin
F(9);
end.
Результат трассировки:
Вход
В выходную строку: 9
Вызов F(n-2)
Вход
В выходную строку: 7
Вызов F(n-2)
Вход
В выходную строку: 5
Вызов F(n-2)
Вход
В выходную строку: 3
Вызов F(n-2)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 2
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Итак. Мы имеем строку из 72 пятерок.
Сначала все пятерки заменяются на тройки (приоритетным действием у нас является замена первого вхождение трех идущих подряд пятерок тройками, а т.к. 72 кратно трем, то преобразованная строка будет состоять только из троек). После этого у нас остается строка, состоящая из 24 троек.
555 555 555 555 ... 555 => 333 333 333 333 333 333 333 333
Затем происходят такие действия: три последовательно идущие тройки заменяются на пятерки, а после того как таких пятерок будет три, они заменятся на одну тройку. Следственно 9 троек заменяются на одну. После проведение данных действий у нас остается 24-9+1-9+1=16-9+1=8 троек.
333 333 333 333 333 333 333 333
555 333 333 333 333 333
333 333 333 333 333 3
555 333 333 3
333 333 33
Так как мы уже не можем получить заменой троек хотя бы три пятерки, то первые вхождения трех подряд идущих троек заменяются пятерками.
333 333 33
5 333 33
5533
ответ: 5533