• Предмет: Информатика
  • Автор: Vanyasuper2000
  • Вопрос задан 2 года назад

Написать программу в Паскале: Вводятся два натуральных числа - N и S. Требуется напечатать по одному разу все варианты размена N монетами суммы в S рублей. Варианты, отличающиеся только порядком монет, считаются одинаковыми. Каждый вариант должен быть напечатан на отдельной строке. Имеются в неограниченном количестве монеты достоинством 1, 2, 5, 10 рублей.

Ответы

Ответ дал: BobbyFresnel
1

===== PascalABC.NET =====

begin

 var (s, n) := ReadInteger2('Введите S и N:');

 var r := 0;

 for var m10 := 0 to S div 10 do

 begin

   for var m5 := 0 to (S - 10 * m10) div 5 do

   begin

     if m10 + m5 > N then

       break;

     for var m2 := 0 to (S - 10 * m10 - 5 * m5) div 2 do

     begin

       if m10 + m5 + m2 > N then

         break;

       for var m1 := 0 to S - 10 * m10 - 5 * m5 - 2 * m2 do

       begin

         if m10 + m5 + m2 + m1 > N then

           break;  

         if (m10 * 10 + m5 * 5 + m2 *2 + m1 = s) and

           (m10 + m5 + m2+ m1 = N) then

         begin  

           $'{m10} x 10 + {m5} x 5 + {m2} x 2 + {m1} x 1'.Println;

           Inc(r)

         end

       end

     end

   end

 end;

 if r > 0 then

   Println('Найдено вариантов размена:', r)

 else

   Println('Вариантов такого размена нет')

end.


Vanyasuper2000: А где переменная N?
BobbyFresnel: Упс... прощения прошу, меня немного отвлекли и я про ограничение N просто абыл. Пометьте нарушение, я переделаю.
BobbyFresnel: Исправить сам уже не могу - время вышло.
Вас заинтересует