tsadak Ответов: 2

Алгоритмическое решение для оплаты определенной суммы денег из банкомата с использованием макс. Количество более высоких банкнот


Привет

У меня есть вопрос, который является скорее алгоритмическим, чем программным. Из этого следует:
У нас есть банкноты 100, 50, 20, 10, 5 и 1 (любая валюта) в банкомате, с конкретными суммами каждого номинала (вы можете проверить и получить сумму каждого номинала).
Приходит клиент и хочет снять в банкомате определенную сумму денег.
Мне нужен алгоритм определения наиболее оптимальных сумм каждого номинала для оплаты клиенту, "оптимальный" означает использование максимального количества более высоких банкнот. например, если клиент хочет нарисовать 150, оптимальным решением будет 1 банкнота 100 и 1 банкнота 50 (а не три 50).
Алгоритм должен решить, возможно ли решение с заданным количеством банкнот в банкомате и prpopse оптимальное решение. Если это вообще невозможно, он уведомит клиента и предложит решение, которое позволит клиенту заплатить "a min. сумма денег больше", чтобы они могли получить то, что хотят. То есть, если они хотят нарисовать 173, а это невозможно, алгоритм должен вернуть "я не могу заплатить вам 173, но заплатите еще 2, и я могу заплатить вам 175!

Решение очень срочное и действительно очень ценю любую помощь.

Заранее спасибо

Что я уже пробовал:

Я ожидаю, что у кого-то уже есть решение этой или подобной проблемы

2 Ответов

Рейтинг:
2

OriginalGriff

Эта домашняя задача не является сложной, если вы подумаете об этом хотя бы несколько минут.

1) Создайте коллекцию различных банкнот, которые доступны, в порядке убывания стоимости:

1000, 100, 50, 20, 10, 5, 1
2) затем цикл, пока у вас есть деньги, чтобы распределить, используя каждое значение по очереди.
2.1) целое число делит сумму для выдачи на текущее значение ноты - то есть число этой ноты для выдачи. таким образом, если сумма равна 3750, а банкнота-1000, у вас будет 3
2.2) возьмите остаток суммы по значению банкноты и установите его в качестве новой суммы. Таким образом, в том же примере новая сумма будет равна 750.
2.3) переходите к следующему значению ноты.
2.4) если сумма теперь равна нулю, выйдите из цикла.

А теперь пиши код!


Рейтинг:
1

Patrice T

Цитата:
Решение очень срочное и действительно очень ценю любую помощь.

Получение решения вручную не должно быть проблемой. Думайте механически, напишите процедуру, которую вы используете для решения проблемы, протестируйте ее, уточните.
Процедура - это ваш алгоритм.

Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.