Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2010, 10:15   #1
specnazkin
Пользователь
 
Регистрация: 16.11.2010
Сообщений: 15
По умолчанию находит одно решение а нужно все возможные

Дано натуральное число N(N<=99). Получить все способы выплаты суммы N с помощью монет достоинством 1,5,10,20 копеек.
пользуясь языком Delphi
вот так я прогал
но уменя находит одно решение а нужно все возможные варианты
заранее спасибо
Код:
program Monets7;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;




const
  Monet : array[1..4] of Integer = (1,5,10,20);

var
  N,K,i : ShortInt;
begin
  i := 4;
writeln (('vvedite neobhodimiu summu(ot 0 do 99):'));
  readln(n);
  repeat
    begin
      K := N div Monet[i];
      if K >= 0 then
        writeln (('trebuetsya '),K,(
          ' monet dostoinstvom '),Monet[i]);
      N := N mod Monet[i];
      i := i-1;
    end
  until (N = 0);
  readln;
end.

Последний раз редактировалось Stilet; 16.11.2010 в 13:41.
specnazkin вне форума Ответить с цитированием
Старый 16.11.2010, 13:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно через рекурсию сделать...
хотите, набросаю?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2010, 15:58   #3
kazzz
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 38
По умолчанию

Он этого хочет, ему сдавать скоро) Набросай пожалуйста!
kazzz вне форума Ответить с цитированием
Старый 16.11.2010, 16:44   #4
specnazkin
Пользователь
 
Регистрация: 16.11.2010
Сообщений: 15
Радость

набросай пожалуйста)))))))

желательно попросче распишите))))))))))

Последний раз редактировалось Stilet; 16.11.2010 в 18:41.
specnazkin вне форума Ответить с цитированием
Старый 16.11.2010, 20:53   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
program Monets7;


{$APPTYPE CONSOLE}

uses SysUtils;

const
  MaxK = 4;
  Monet : array[1..MaxK] of Integer = (1,5,10,20);

type
  TQMonet = array[1..MaxK] of Integer;


procedure ShowAllVariants(S : integer; QM : TQMonet; BeginK : integer );
var i: integer;
begin
  {если достигли нужного результата, напечатаем вариант решения}
  if S=0 then begin
    for i:=1 to MaxK do
      if QM[i]>0 then Write(QM[i],' x "',Monet[i],'" + ');
      WriteLn;
  end
  else
    for i:=BeginK to MaxK do
      if S>=Monet[i] then
      begin
        {увеличим счётчик использования монеты с i-м номиналом}
        Inc(QM[i]);
        {покажем все варианты, где сумма уже уменьшена на величину использованной монеты}
        ShowAllVariants(S-Monet[i], QM, i);
        {восстановим счётчик монет, т.к все варианты с этой монеткой отработаны при рекурсивном вызове ShowAllVariants}
        Dec(QM[i]);
      end;
end;

var
  N, i : ShortInt;
  QMonet : TQMonet;
begin
  writeln (('vvedite neobhodimiu summu(ot 0 do 99):'));
  readln(n);

  {обнулим массив, где будем получать варианты}
  for i:=1 to MaxK do
      QMonet[i] := 0;


  ShowAllVariants(n, QMonet, 1);

  readln;
end.
По моему, не очень сложно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.11.2010, 09:28   #6
specnazkin
Пользователь
 
Регистрация: 16.11.2010
Сообщений: 15
По умолчанию

спасибо))))
specnazkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны цифры от 1 до 38 нужно составить все возможные комбинации из 6 чисел без повторений. gector Фриланс 14 01.04.2013 20:20
Все возможные варианты строки Vikenty Общие вопросы Delphi 3 29.08.2010 03:30
графы - Все возможные пути manuk Помощь студентам 9 23.05.2010 23:58
Все возможные слагаемые anGeee Паскаль, Turbo Pascal, PascalABC.NET 4 04.12.2008 20:22