Вывести все возможные комбинации имеющихся монет - Free Pascal
Формулировка задачи:
Пусть имеется конечный набор монет стоимостью: 10 коп., 50 коп., 1 руб., 2 руб.,
5 руб. и 10 руб. Для заданного целого числа S (обозначающего стоимость товара в
рублях) требуется вывести все возможные комбинации имеющихся монет, суммарная
стоимость которых равняется S. При этом комбинации, различающиеся только лишь
порядком следования монет одинаковой стоимости, являются тождественными и не
должны встречаться более одного раза.
Решение задачи: «Вывести все возможные комбинации имеющихся монет»
textual
Листинг программы
- program test;
- var
- c10, c50, c100, c200, c500, c1000: longint;
- S, Sum: longint;
- begin
- Write('S= (руб) ');
- readln(S);
- S := S * 100;
- for c1000 := 0 to S div 1000 do
- begin
- Sum := c1000 * 1000;
- for c500 := 0 to ((S - Sum) div 500) do
- begin
- Sum := Sum + c500 * 500;
- for c200 := 0 to (S - Sum) div 200 do
- begin
- Sum := Sum + c200 * 200;
- for c100 := 0 to (S - Sum) div 100 do
- begin
- Sum := Sum + c100 * 100;
- for c50 := 0 to (S - Sum) div 50 do
- begin
- Sum := Sum + c50 * 50;
- c10 := (S - Sum) div 10;
- if Sum + c10 * 10 = S then
- writeln(c1000: 4, '*10p + ', c500: 4, '*5p + ', c200: 4, '*2p + ', c100: 4,
- '*1p + ', c50: 4, '*50коп + ', c10: 4, '*10коп = ', S, 'коп');
- Sum := Sum - c50 * 50;
- end;
- Sum := Sum - c100 * 100;
- end;
- Sum := Sum - c200 * 200;
- end;
- Sum := Sum - c500 * 500;
- end;
- Sum := c1000 * 1000;
- end;
- end.
Объяснение кода листинга программы
Список действий в коде:
- Программа запрашивает у пользователя ввод количества рублей (S), которые он хочет перевести в монеты.
- Затем программа переводит S в формат длинного целого числа, умножая его на 100, чтобы получить количество центов.
- Используется цикл для перебора всех возможных комбинаций монет от 1000 центов (10 рублей) до S центов.
- Для каждой комбинации используется цикл для перебора всех возможных комбинаций монет от 500 центов (5 рублей) до (S - Sum) центов.
- Этот цикл также используется для перебора всех возможных комбинаций монет от 200 центов (2 рубля) до (S - Sum) центов.
- Аналогично, цикл используется для перебора всех возможных комбинаций монет от 100 центов (1 рубль) до (S - Sum) центов.
- Затем используется цикл для перебора всех возможных комбинаций монет от 50 центов (50 копеек) до (S - Sum) центов.
- Если (S - Sum) делится на 10 без остатка, то программа выводит текущую комбинацию монет.
- После вывода текущей комбинации, все суммы сбрасываются, и цикл продолжается со следующего номинала монет.
- Когда все комбинации монет от 1000 центов до S центов были перебраны, программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д