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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2009, 19:31   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Рекурсия. Задача про монеты

Ох... Я себя таким тупым чувствую, но вот очередная задача на рекурсию и снова ноль мыслей Сделал заготовку (см. ниже), по задумке Money и есть рекурсивная процедура, но вот что в ней прописывать ваще не знаю...
Вот текст задачи (если что):
|У покупателя есть n монет достоинством H(1),..., H(n). У продавца есть m монет достоинством B(1),...,B(l). Может ли купить покупатель вещь стоимости S так, чтобы у продавца нашлась точная сдача (если она необходима).|
Код:
program Recur;
uses Crt;
type
  TMoney = record
    Cost: integer;
    Count: integer;
  end;
var
  Sell, Buy: array [1..10] of TMoney;
  Price, i: integer;

procedure SetStartMoney;
begin
  Sell[1].Cost := 2;
  Sell[1].Count := 3;
  Sell[2].Cost := 5;
  Sell[2].Count := 4;
  Buy[1].Cost := 1;
  Buy[1].Count := 1;
  Buy[2].Cost := 3;
  Buy[2].Count := 5;
end;

procedure Money();
begin
  
end;

begin
  ClrScr;
  SetStartMoney;
  Write('Введите стоимость товара: ');
  Readln(Price);
  Money;
  repeat until keypressed;
end.
Наведите на верные мысли (и объясните, как они к вам приходят )
k1r1ch вне форума Ответить с цитированием
Старый 21.10.2009, 19:37   #2
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

про монеты
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 21.10.2009, 19:38   #3
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Да уж. Опять напишу "человеческое" (без рекурсии) решение. Задача известная, есть и на многих онлайн-АСМ-системах, и на Алголисте. Фактически можно свести к тому, что у продавца есть монеты свои и покупателя и ему необходимо с них собрать сумму, равную общей сумме минус цена вещи. Есть 2 основных способа решения. Если большие ограничения на количество монет и маленькие - на их номинал, - тогда динамикой. Если маленькие на количество и большие на номинал - тогда нерекурсивным перебором. Сейчас распишу оба способа.
LeBron вне форума Ответить с цитированием
Старый 21.10.2009, 19:42   #4
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

О, на динамическое решение уже и ссылку бросили. Тогда распишу перебор. Генерим 2ичное число из числа нолей, равного числу монет. Далее на каждом шагу будем увеличивать на 1 это число, пока не дойдем до (2^n)-1. Увеличив, составляем сумму следующим образом - если бит, соответствующий выбраной монете, равен 1, то включаем ее в сумму, иначе - нет. Если сумма равна искомой - есть ответ.
Для увеличения производительности лучше пересчитывать сумму во время самого увеличения числа на 1.
LeBron вне форума Ответить с цитированием
Старый 21.10.2009, 21:15   #5
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Погодите! Динамическое программирование - это не рекурсия?! Блин, а там у темы название динамическое программирование, я думал это одно и то же! Больше не буду пытаться рекурсией сделать)
k1r1ch вне форума Ответить с цитированием
Старый 21.10.2009, 21:52   #6
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Можете рекурсией, можете не рекурсией, как Вам удобно. Но если нету даже примерного представления об алгоритме решения, то рекурсия Вам не поможет.
LeBron вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на языке Pascal. Рекурсия. (FainT) Помощь студентам 6 23.05.2009 15:45
Рекурсия - сложная задача! RomT24 Паскаль, Turbo Pascal, PascalABC.NET 5 06.05.2009 23:14
Задача про треугольник YO$YA Помощь студентам 10 15.11.2008 20:29
Монеты 10 коп KORT Свободное общение 7 24.08.2007 18:58