Вывести все возможные комбинации имеющихся монет - 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.

Объяснение кода листинга программы

Список действий в коде:

  1. Программа запрашивает у пользователя ввод количества рублей (S), которые он хочет перевести в монеты.
  2. Затем программа переводит S в формат длинного целого числа, умножая его на 100, чтобы получить количество центов.
  3. Используется цикл для перебора всех возможных комбинаций монет от 1000 центов (10 рублей) до S центов.
  4. Для каждой комбинации используется цикл для перебора всех возможных комбинаций монет от 500 центов (5 рублей) до (S - Sum) центов.
  5. Этот цикл также используется для перебора всех возможных комбинаций монет от 200 центов (2 рубля) до (S - Sum) центов.
  6. Аналогично, цикл используется для перебора всех возможных комбинаций монет от 100 центов (1 рубль) до (S - Sum) центов.
  7. Затем используется цикл для перебора всех возможных комбинаций монет от 50 центов (50 копеек) до (S - Sum) центов.
  8. Если (S - Sum) делится на 10 без остатка, то программа выводит текущую комбинацию монет.
  9. После вывода текущей комбинации, все суммы сбрасываются, и цикл продолжается со следующего номинала монет.
  10. Когда все комбинации монет от 1000 центов до S центов были перебраны, программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы