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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2010, 08:02   #1
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию Жадный алгоритм. Задача о размене денег.

Доброго времени суток всем! нужно написать программу на Delphi(других не знаем) которая бы разменивала некоторую сумму денег наименьшим числом купюр. Для реализации должен быть применен жадный алгоритм.

Например. имеются купюры номиналами:1руб 5руб 10 руб 50 руб 100 руб 500 руб 1000 руб 5000 руб. нужно разменять сумму например 5190руб. Программа должна выдать:сумму 5190 можно разменять 5000+100+50+10+10+10+10(ну я так себе это представляю)

В программировании я только на самом начале , поэтому даже не знаю как подступиться. Объясните пожалуйста как вообще можно это сделать. Если не сложно накидайте программу или жадный алгоритм напишите а то курсовую уже скоро сдавать)))

Заранее всем благодарен!
Multiman вне форума Ответить с цитированием
Старый 17.10.2010, 08:39   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

у меня всегда были проблемы с динамическим программированием. НО. Т.к. число купюр каждого достоинства у Вас не ограничего, то задача решается элементарно!
помещаем все купюры в массив по уменьшению их стоимости.
Пусть надо получить число X
Код:
i (начальное значение, какие купюры брать) := 1 (т.е. сначала берём купюры самого большого достоинства)
цикл, пока X больше нуля:
   число купюр Ni их определяем как
       Ni := X div Величина_Купюры;
   выводим количество купюр Ni (с указанием достоинства)
   X := X - Величина_Купюры * Ni;
   i := i + 1;
   if i>РазмераМассиваСДостоинстомКупюр тогда begin
      Сообщение: Ошибка! Сумма не может быть получена,
            исходя из данного набора достоинств купюр!
       выход!
   end
конец цикла.
всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.10.2010, 11:58   #3
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию

ничего не понял) можно все прямо с объявления массива и переменных и вывод результата?( чисто код) да и зачем эта строчка:

if i>РазмераМассиваСДостоинстомКупюр тогда begin
Сообщение: Ошибка! Сумма не может быть получена,
исходя из данного набора достоинств купюр!
выход!
end

прога всегда должна разменивать т.к. сумма всегда будет целым числом
Multiman вне форума Ответить с цитированием
Старый 17.10.2010, 23:02   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
прога всегда должна разменивать т.к. сумма всегда будет целым числом
При данном наборе купюр - да, такого никогда не может быть.
А вот если выкинуть из набора, например, 1 рублёвые купюры, и всё. То, что сумма целое число - может и не помочь!
Ладно. не хотите делать проверку - не делайте.

Проще код кинуть, чем разжёвывать. я и так, словами алгоритм описывал раза в три дольше, чем написал бы код. Не хотите разбираться и писать код самостоятельно - не надо. Вот решение:
Код:
const
  Kupiury : array[1..8] of integer =
    (5000, 1000, 500, 100, 50, 10, 5, 1);
var
  X : integer;
  i, Ni : integer;
  s : string;
begin
  X := StrToInt(Edit1.Text);
  s := '';

  i := 1;
  while X>0 do begin
    Ni := X div Kupiury[i];
    if Ni>0 then
      s := s + ' '+IntToStr(Ni)+'*'+
                   IntToStr(Kupiury[i])+' ';
    X := X - Ni * Kupiury[i];
    i := i + 1;
 end;
 Edit2.Text := s;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.10.2010, 13:15   #5
Multiman
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 91
По умолчанию

Спасибо вам огромное!
Когда написали код, то сразу же все стало ясно=) А то я маленько запутался в вашем алгоритме. Я просто еще не умею программировать и в алгоритмах плохо разбираюсь, а в техникуме особо не напрягаются нас учить и что-то объяснять... Вот и приходиться самим во всем разбираться. А вы уже профессионал и для вас это разминка)
Еще раз большое спасибо за то что не проигнорировали и помогли.
Multiman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi(1й курс) Жадный алгоритм Archetype Помощь студентам 8 17.05.2010 19:49
Жадный алгоритм и перебор mailjaffka Помощь студентам 10 17.05.2010 16:20
Объясните алгоритм.(For)Простая задача BackSlash Общие вопросы C/C++ 3 16.12.2009 00:02
Помошите найти не жадный DOA 4.0.7, для Delphi 6.0 Lis БД в Delphi 0 06.11.2007 15:09