Вывести все возможные комбинации имеющихся монет - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Пусть имеется конечный набор монет стоимостью: 10 коп., 50 коп., 1 руб., 2 руб., 5 руб. и 10 руб. Для заданного целого числа S (обозначающего стоимость товара в рублях) требуется вывести все возможные комбинации имеющихся монет, суммарная стоимость которых равняется S. При этом комбинации, различающиеся только лишь порядком следования монет одинаковой стоимости, являются тождественными и не должны встречаться более одного раза.
Помогите, пожалуйста

Решение задачи: «Вывести все возможные комбинации имеющихся монет»

textual
Листинг программы
  1. program test;
  2.  
  3. var
  4.   c10, c50, c100, c200, c500, c1000: longint;
  5.   S, Sum: longint;
  6. begin
  7.   Write('S= (руб) ');
  8.   readln(S);
  9.   S := S * 100;
  10.   for c1000 := 0 to S div 1000 do
  11.   begin
  12.     Sum := c1000 * 1000;
  13.     for c500 := 0 to ((S - Sum) div 500) do
  14.     begin
  15.       Sum := Sum + c500 * 500;
  16.       for c200 := 0 to (S - Sum) div 200 do
  17.       begin
  18.         Sum := Sum + c200 * 200;
  19.         for c100 := 0 to (S - Sum) div 100 do
  20.         begin
  21.           Sum := Sum + c100 * 100;
  22.           for c50 := 0 to (S - Sum) div 50 do
  23.           begin
  24.             Sum := Sum + c50 * 50;
  25.             c10 := (S - Sum) div 10;
  26.             if Sum + c10 * 10 = S then
  27.               writeln(c1000: 4, '*10p + ', c500: 4, '*5p + ', c200: 4, '*2p + ', c100: 4,
  28.                 '*1p + ', c50: 4, '*50коп + ', c10: 4, '*10коп = ', S, 'коп');
  29.             Sum := Sum - c50 * 50;
  30.           end;
  31.           Sum := Sum - c100 * 100;
  32.         end;
  33.         Sum := Sum - c200 * 200;
  34.       end;
  35.       Sum := Sum - c500 * 500;
  36.     end;
  37.     Sum := c1000 * 1000;
  38.   end;
  39. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы