Java程序,告诉我们从1美分到99美分的任何变化金额

我必须编写一个Java程序,告诉我们从1美分到99美分之间的任何变化金额。 例如,如果金额为86美分,则输出将如下所示:

86美分可以给出3个季度,1美分和1美分。

使用25,10,5和1的硬币面额。您的程序将使用以下方法(以及其他方法):

public static int computeCoin(int coinValue,); // Precondition: 0 < coinValue < 100; // Postcondition: returned value has been set equal to the maximum //number of coins of the denomination coinValue cents that can be //obtained from amount (a different variable) cents. amount has been //decreased by the value of the coins, that is, decreased by //returnedValue*coinValue. 

到目前为止,这就是我所拥有的,但我想我错过的更多可以有人帮我一把吗? 我也不认为使用双打而不是int。

 public class Assignment6{ public static void main(String [] args){ amount = (int)(Double.parseDouble(args[0])*100); System.out.println("Five: " + computeCoin(500)); System.out.println("one: " + computeCoin(100) ); System.out.println("Q : " + computeCoin(25) ); System.out.println("D : " + computeCoin(10) ); System.out.println("N : " + computeCoin(5) ); System.out.println("P : " + computeCoin(1) ); } 

 public class Assignment6 { private static int amount = 0; public static void main(String[] args) { amount = (int)(Double.parseDouble(args[0])*100); System.out.println("Five: " + computeCoin(500)); System.out.println("one: " + computeCoin(100) ); System.out.println("Q : " + computeCoin(25) ); System.out.println("D : " + computeCoin(10) ); System.out.println("N : " + computeCoin(5) ); System.out.println("P : " + computeCoin(1) ); } public static int computeCoin(int cointValue) { int val = amount / cointValue; amount -= val * cointValue; return val; } } 

这里的技巧在于computeCoin方法,并且在除法是整数除法的事实中,因此val将保持给定值( coinValue )的“最大”硬币数,其总值不超过amount

像这样?

 public class Assignment6 { public static int amount; public static int amountPreserv; public static void main(String[] args) { amount = (int) (Double.parseDouble(args[0]) * 100); amountPreserv = amount; System.out.println("Five: " + computeCoin(500)); System.out.println("one: " + computeCoin(100)); System.out.println("Q : " + computeCoin(25)); System.out.println("D : " + computeCoin(10)); System.out.println("N : " + computeCoin(5)); System.out.println("P : " + computeCoin(1)); System.out.println("Value inputed : " + amountPreserv); } private static int computeCoin(int i) { int cont = 0; while (amount > i) { amount -= i; cont++; } return cont; } } 

最重要的一点是,改变是一种贪婪算法,这意味着在任何给定时间使你最接近目标的选项是最有效的选择。 因此,对于任何数量和任何面额,最有效的算法应该是这样的:

 int total; int[] denom = { w, x, y, z }; int[] count = new int[denom.length] int i = 0; while (i < denom.length && total > 0) { while ( total >= denom[i] ) { total -= denom[i]; count[i]++; } i++ } 

编辑:任何面额实际上都有点野心。 只有你有一个最小面额才能保证每次都能做出改变。