Задача 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
- 323 reads