// A program to determine the minimum number of coins needed to make change. // (c) 1997 duane a. bailey import structure.*; public class RChange { public static coins change(int amount) { Assert.pre(amount >= 0, "Amount must be positive."); coins best, possible; if (amount == 0) best = new coins(); else { possible = change(amount-1); possible.addPenny(); best = possible; if (amount >= 5) { possible = change(amount-5); possible.addNickle(); if (best.total() > possible.total()) best = possible; } if (amount >= 10) { possible = change(amount-10); possible.addDime(); if (best.total() > possible.total()) best = possible; } if (amount >= 25) { possible = change(amount-25); possible.addQuarter(); if (best.total() > possible.total()) best = possible; } } return new coins(best); } public static void main(String args[]) { for (int i = 0; i < 50; i++) { System.out.println("Change for "+i+" cents: "+change(i)); } } } class coins { int pennies, nickles, dimes, quarters; public coins() { pennies = nickles = dimes = quarters = 0; } public coins(coins that) { this.pennies = that.pennies; this.nickles = that.nickles; this.dimes = that.dimes; this.quarters = that.quarters; } public void addPenny() { pennies++; } public void addNickle() { nickles++; } public void addDime() { dimes++; } public void addQuarter() { quarters++; } public int total() { return pennies+nickles+dimes+quarters; } public String toString() { return "pennies: "+pennies+", nickles: "+nickles+ ", dimes: "+dimes+", quarters: "+quarters; } }