Untitled
unknown
plain_text
a year ago
2.1 kB
5
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