|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.07.2017, 11:45 | #1 |
Форумчанин
Регистрация: 15.11.2015
Сообщений: 151
|
Задача «Разменный автомат»
Задача «Разменный автомат», с условием ,что у автомата конечное число каждой купюры которые хранятся в файле, а также добавить учет выданных средств. Почему-то выводит всегда одни нули и не отнимает значение в файлах, функции проверял, по отдельности работают нормально. Спасибо за помощь:
Код:
|
24.07.2017, 11:52 | #2 |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
Где текстовые файлы, какие значения в них записаны?
|
24.07.2017, 12:50 | #3 |
Форумчанин
Регистрация: 15.11.2015
Сообщений: 151
|
Извините, забыл
Текстовые файлы вида: 500.txt, 200.txt, 100.txt. 50.txt и так далее, в папке money, в них записаны рандомные числа которые обозначают количество купюр test.com.zip |
24.07.2017, 16:52 | #4 |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
После первой же итерации цикла в avtoMoney() значение атрибута, переданного в эту функцию, становится равным 0 – потому, что остаток от деления 1779 на 1 = 0 ($n = $n % $value;).
И все дальнейшие действия не имеют смысла – т.к. теперь $n = 0; // Добавляю +1 в выданную купюру – это вообще не работает, и цикл там не нужен – т.к. речь идёт о купюре только одного конкретного номинала. Должно быть примерно так: $countMoney[$key] = ++$countMoney[$key]; Дальше не проверял – но общая логика работы с купюрами явно неверная. Размен монет – это довольно популярный пример задачи по жадным алгоритмам, рекомендую погуглить и изучить. |
24.07.2017, 18:02 | #5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
полностью согласен.
задачка не простая. для затравки: Код:
поэтому, если он не нашел решение, это не означает, что его нет. Нужно пытаться решить другим способом (например, перебором). если интересно, могу написать случай, когда жадный алгоритм не даёт решения, хотя оно есть. Последний раз редактировалось Serge_Bliznykov; 24.07.2017 в 18:41. |
24.07.2017, 18:39 | #6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Если, например, нужно выдать 11, а купюры по 5 и 2, то жадный алгоритм не сможет. Скорее динамическое программирование
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
24.07.2017, 18:45 | #7 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Размен монет - это задача о рюкзаке. Жадным алгоритмом в общем случае НЕ берётся. Стандартный подход - динамическое программирование по набираемой сумме
|
24.07.2017, 18:56 | #8 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ну, это не совсем рюкзак, там как бы задача другая - максимизация стоимости взятых вещей.
Но, по сути, согласен. и с этим согласен. Хотя, уверен, что в реальных банкоматах именно жадный алгоритм и используется или есть набор купюр или он просто отказывается выдать нужную сумму. Да и, справедливости ради, жадный алгоритм покроет 99% требуемых сумм. Но, конечно, это не решение задачи. Цитата:
ну или, если не сложно, распишите, пожалуйста, как строится реккурентная динамика в этом конкретном случае. |
|
24.07.2017, 19:05 | #9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
https://informatics.mccme.ru/mod/book/view.php?id=815
Мельком глянул не вникая ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
24.07.2017, 20:41 | #10 | |
Форумчанин
Регистрация: 15.11.2015
Сообщений: 151
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
конечный автомат | fkty | Помощь студентам | 18 | 17.01.2015 18:49 |
автомат | crechet51 | Microsoft Office Excel | 8 | 08.10.2012 02:04 |
автомат | crechet51 | Помощь студентам | 0 | 07.10.2012 01:50 |
Клеточный автомат | Munya | Фриланс | 4 | 08.05.2010 13:34 |
Клеточный автомат | Noor | Помощь студентам | 4 | 29.11.2007 09:19 |