Задача 24 Урок 15
Primary tabs
Задача про банкомат:
Пользователь вводит целое число - сумму в некоторой валюте, требуется выдать
эту сумму купюрами наибольшего достоинства.
Напишите программу, которая в качестве результата скажет, как именно надо
разменять указанную сумму купюрами наибольшего достоинства
(укажет количество для купюры каждого типа)
Например, пусть у нас набор купюр 1000, 500, 100 и 50 рублей:
Сумму 350 рублей: по задаче следует выдать как: 3 по 100 и 1 по 50
Сумму 520 рублей: таким набором разменять нельзя.
Указания по возможному оформлению (можно оформлять и иначе):
Напишите процедуру, которая принимает на вход:
1 число (сумму) по значению
2 массив "достоинств" купюр отсортированный по убыванию (предположим, что видов купюр не может быть больше 10) по значению
3 массив для "количеств купюр" по ссылке
4 булевский параметр успешности подбора купюр (некоторые суммы вообще разменять нельзя)
После выполнения процедуры в четвертом параметре должен быть true или false,
а в массиве "количеств" должены находиться значения, на основании которых банкомант мог бы выдать купюры.
type
arr1 = array [1..10] of integer;
arr2 = array [1..10] of integer;
var cash : integer;
flag : boolean;
a : Arr1;
b : arr2;
procedure bank(cash : integer; a : Arr1; var b : arr2; flag : boolean);
var i : integer;
begin
i := 1;
while i <= high(a) do
begin
if cash >= a[i] then
begin
b[i] += 1;
cash := cash - a[i];
flag := true;
if cash = 0 then break;
end
else
begin
i += 1;
flag := false;
end;
end;
if flag then
begin
writeln('Выдать сумму следующими купюрами:');
for i := 1 to 10 do
if b[i] > 0 then
writeln('купюру ', a[i], ' - ', b[i], ' раз');
end
else
writeln('Выбранная сумма не может быть выдана');
end;
begin
a[1] := 50000;
a[2] := 20000;
a[3] := 10000;
a[4] := 5000;
a[5] := 2000;
a[6] := 1000;
a[7] := 500;
a[8] := 200;
a[9] := 100;
a[10] := 50;
writeln('Сколько выдать?');
readln(cash);
bank(cash, a, b, flag);
readln();
end. - Log in to post comments
- 600 reads