Банкомат
Условие
Номиналы 5000, 1000, 500, 100, 50. Объект limits хранит доступное количество каждой купюры и мутируется после выдачи. Верни объект «номинал: количество», выдавая приоритет крупным купюрам. Если сумма не кратна минимальной купюре - вернуть строку 'Error: Incorrect value'. Если купюр не хватает - 'Error: Not enough money'.
Что проверяют тесты
выдаёт крупными
лимиты уменьшаются
не хватает денег
сумма не кратна
последовательные вызовы
крупные исчерпаны - добираем мелкими
Как подойти
Жадный алгоритм здесь корректен, потому что номиналы кратны друг другу - для произвольных номиналов пришлось бы считать динамику, и это хороший follow-up. Ключевое требование к реализации: сначала построить план целиком, и только потом списать купюры. Списание по ходу оставит банкомат в испорченном состоянии при неудачной выдаче - именно это и проверяет тест с миллионом.
Подсказки: 3
- Идём от крупных к мелким, беря минимум из «сколько нужно» и «сколько есть».
- Лимиты нельзя трогать, пока не убедился, что выдача возможна целиком.
- Проверка кратности - до всего остального.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.