Untitled
unknown
plain_text
5 months ago
2.1 kB
3
Indexable
import java.util.*; /** * Банкомат. * Инициализируется набором купюр и умеет выдавать купюры для заданной суммы, либо отвечать отказом. * При выдаче купюры списываются с баланса банкомата. * Допустимые номиналы: 50₽, 100₽, 500₽, 1000₽, 5000₽. */ class ATM { private Map<Integer, Integer> availableCash = new HashMap<>(Map.of( 50, 0, 100, 0, 500, 0, 1000, 0, 5000, 0 )); private Integer sumOfCash = 0; public void minusCash(Integer sum, List<Integer> result) { sumOfCash -= sum; result.forEach(cash -> availableCash.put(cash, availableCash.get(cash) - 1)); } public void reloadATMMoney(Map<Integer, Integer> reloadedMoney) { availableCash.putAll(reloadedMoney); reloadedMoney.forEach((key, value) -> sumOfCash += value * key); } public List<Integer> getCash(Integer sum) { Integer initialSum = sum; if (sumOfCash < sum) { throw new IllegalArgumentException("В банкомате недостаточно денег"); } List<Integer> result = new ArrayList<>(); for (Map.Entry<Integer, Integer> entry : availableCash.entrySet()) { while (sum >= entry.getKey() && entry.getValue() > 0) { result.add(entry.getKey()); sum -= entry.getKey(); } } if (sum > 0) { throw new IllegalArgumentException("Введена неправильная сумма денег"); } minusCash(initialSum, result); return result; } public static void main(String[] args) { ATM atm = new ATM(); atm.reloadATMMoney( Map.of( 50, 2, 100, 2, 500, 4, 1000, 5, 5000, 6 ) ); System.out.println(atm.getCash(2000)); } }
Editor is loading...
Leave a Comment