日期:2014-05-20  浏览次数:20726 次

java代码实现1,2,5分拼凑一元的算法
多谢大神指教~

------解决方案--------------------
《计算方法》。
一般还会有个要求,
比如:只要凑一个一元就行。
比如:求所有能够凑成一元的情况。
比如:使用的硬币数最少。
比如:使用的硬币数最多。
------解决方案--------------------
可以凑成的情况,简单理解为5*?+2*?+1*?=10

public class test {
public static void main(String[] args) {
for (int a = 0; a <=2; a++) {
for (int b = 0; b <=5; b++) {
int c=10-a*5-b*2;
if(c>0&&a*5+b*2+c*1==10)
System.out.println(a+"*5+"+b+"*2+"+c+"*1=10");
}
}
}
}
------解决方案--------------------
探讨
可以凑成的情况,简单理解为5*?+2*?+1*?=10

public class test {
public static void main(String[] args) {
for (int a = 0; a <=2; a++) {
for (int b = 0; b <=5; b++) {
int c=10-a*5-b*2;
if(c>0&amp;&amp;a*5+b*2+c……

------解决方案--------------------
Java code

    int k = 0 ; //1出现的次数
        for (int i = 0; i <= 2 ; i++){ //5最多出现两次
            for (int j = 0; j <= 5; j++){//2最多出现五次
                k =  10 - i * 2 - j * 2 ;
                if (k >= 0){
                    System.out.println("5出现 "+ i + " 次,2出现  " + j + "次,1出现 " + k  +"次");
                }else { //如果k小于0,则之后的都不满足,所以跳出内层循环,即2出现的那层循环j
                    break ;
                }
            }
            
        }

------解决方案--------------------
1元=100分,为什么楼上的都写10呢?

------解决方案--------------------
如果金币种类多的话可以用回溯+剪枝
------解决方案--------------------
错了,是《运筹学》中的线性规划问题吧 ?
按理说,应该是规定各种面值的硬币,分别多少枚。求凑成1元所用个数最少的情况。
------解决方案--------------------
想复杂了。最简单的,穷举法。
Java code

    public static void main(String[] args) {
        int a=20;
        int b=50;
        int c=100;
        final int total = 100;
        for(int i=1;i<=a;i++){
            for(int j=1;j<=b;j++){
                for(int k=1;k<=c;k++){
                    if(total == i*5+j*2+k){
                        System.out.println("5x"+i+" + 2x"+j+" + 1x"+k);
                    }
                }
            }
        }
    }