Вывести все возможные комбинации имеющихся монет - 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 центов были перебраны, программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д