我必须编写一个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) );
}
答案 0 :(得分:4)
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
)。
答案 1 :(得分:0)
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;
}
}
答案 2 :(得分:0)
最重要的一点是,改变是一种贪婪算法,这意味着在任何给定时间使你最接近目标的选项是最有效的选择。因此,对于任何金额和任何面额,最有效的算法应该是这样的:
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++
}
编辑:任何面额实际上都有点野心。只有你有一个最小面额才能保证每次都能做出改变,这是唯一的。