【发布时间】:2014-09-21 15:31:24
【问题描述】:
编写一个程序,要求用户输入一个美元金额 X。显示所有等于 X 的硬币(四分之一、一角、镍、一分钱)组合。输入美元金额 $:1.2 4 四分之一,2 一角,0 镍,0便士 3 季度,4 毛钱,1 镍,0 便士......
package p1;
public class Combination {
public static void findCombination(Double value){
int totalCents = (int) (value*100);
int aq = totalCents/25;
int ad = totalCents/10;
int an = totalCents/5;
int ap = totalCents;
for(int q=0; q<= aq; q++){
for(int d=0; d<= ad; d++){
for(int n=0;n<= an; n++){
for(int p=0;p<=ap; p++){
if(((q*25) + (d*10) + (n*5) + p ) == totalCents){
System.out.println("Q: "+q+" D: "+d+" N: "+n+" P: "+p );
}
}
}
}
}
还有比这更优化的解决方案吗,我想不到。
【问题讨论】:
-
如果您的代码有效,您可以将其发布到 CodeReview (codereview.stackexchange.com)
-
这类事情属于可以通过动态规划优化以减少重叠工作的问题类型,因此它只完成一次。请参阅:en.wikipedia.org/wiki/Dynamic_programming。
标签: java