СообЧа > База Знаний > Программирование > Pascal

Вопрос

Эмулятор банкомата

Заданы количества купюр след. достоинств:
1,3,5,10,20,50,100,500,1000,2000,5000.

Можно ли набрать из этих монет заданную сумму? Если можно, то указать как это сделать. Подскажите, как решить эту задачу?

Ответ

Если стоит задача набрать заданную сумму X и не учитывать того, что некоторых купюр может не оказаться, то задача становится немного проще.

Решение:

Пусть надо набрать сумму X рублей. Организуем следующий цикл:

Пока остаток не равен 0
1. Берем номинал купюры (Y), начиная с самой большой.
2. Ищем количество таких купюр, которое не превышает исходной суммы. N = X div Y.
3. Находим остаток, который заведомо меньше Y и который надо будет покрыть. R = X — N*Y
4. Переходим к пункту 1

Пример:

Пусть нужно найти набор купюр для суммы 12345 рублей.
X = 12345

1) Y = 5000, N = 2, R = 12345 — 2*5000 = 2345
2) Y = 2000, N = 1, R = 2345 — 2000 * 1 = 345
3) Y = 1000, N = 0, R = 345 — 1000*0 = 345
4) Y = 500, N = 0, R = 345 — 500*0 = 345
5) Y = 100, N = 3, R = 345 — 3* 100 = 45
6) Y = 50, N = 0, R = 45 — 0*50 = 45
7) Y = 20, N = 2, R = 45 — 2*20 = 5
8) Y = 10, N = 0, R = 5 — 10*0 = 5
9) Y = 5, N = 1, R = 5-1*5=0

Конец цикла.

Имеем: для набора суммы 12345 рублей нужно

5000 — 2
2000 — 1
1000 — 0
500 — 0
100 — 3
50 — 0
20 — 2
10 — 0
5 — 1

До остальных даже не дошло…

Так как можно представить например 50 = 2*20 + 10, то это не единственный алгоритм.

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация