/** * Cash Register * * Description * The goal of this challenge is to design a cash register program. You will be * given two decimal numbers. The first is the purchase price (PP) of the item. * The second is the cash (CH) given by the customer. Your register currently has * the following bills/coins within it: * * * * * * * * * * * * * *
PENNY.01
NICKEL.05
DIME.10
QUARTER.25
HALF DOLLAR.50
ONE1.00
TWO2.00
FIVE5.00
TEN10.00
TWENTY20.00
FIFTY50.00
ONE HUNDRED100.00
* The aim of the program is to calculate the change that has to be returned to * the customer. * * Input * Your program should read lines of text from standard input. Each line contains * two numbers which are separated by a semicolon. The first is the Purchase price (PP) * and the second is the cash(CH) given by the customer. * * Output * For each line of input print a single line to standard output which is the change * to be returned to the customer. In case the CH < PP, print out ERROR. If CH == PP, * print out ZERO. For all other cases print the amount that needs to be returned, * in terms of the currency values provided. The output should be alphabetically * sorted. * * Example * 15.94;16.00 => NICKEL,PENNY * 17;16 => ERROR * 35;35 => ZERO * 45;50 => FIVE */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Set; import java.util.SortedMap; import java.util.stream.Collectors; import java.util.stream.Stream; import java.nio.charset.StandardCharsets; public class Main { private static final SortedMap coins; static { coins = new java.util.TreeMap( (d1,d2) -> (d1>d2)? -1 : (d1 changes = new java.util.HashSet<>(); double remains = inputs[1] - inputs[0]; for (Double coin : coins.keySet()) { double newRemains = remains % coin; if (newRemains != remains) { remains = newRemains; changes.add(coins.get(coin)); } } System.out.println(changes.stream().sorted().collect(Collectors.joining(","))); } } }