最少钱币数:

最少钱币数

【问题描述】

这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑 15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。显然,最少需要2个钱币才能凑成15元。

你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。

要求

数据输入】输入可以有多个测试用例。每个测试用例的第一行是待凑的钱数值M(1 <= M <= 2000,整数),接着的一行中,第一个整数K(1 <= K <= 10)表示币种个数,随后是K个互不相同的钱币面值Ki(1 <= Ki <= 1000)。

代码实现:

public class MinCoins {

/*
 * 给定一个数额,用最少的钱币数额组合形成
 */
    public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入该钱币的数额:");
    int sum=sc.nextInt();//钱币数额
    int coinnum[]={100,50,20,10,5,2,1};//币值所有的面额
    int num[]=new int[7];//存储每张面额的数量
    int mincoin=0;
    for(int i=0,resum=sum;i<num.length;i++){
        num[i]=resum/coinnum[i];
        resum=resum-(num[i]*coinnum[i]);
        mincoin+=num[i];
    }
    String s=sum+"=";
    for(int j=0;j<coinnum.length;j++){
        if(num[j]>0){
            s=s+(coinnum[j]+"*"+num[j]+"+");
        }
    }
    //表示从0到s的最后一位之间的字符串
    s = s.substring(0, s.lastIndexOf("+"));   
    System.out.println("纸币组合:"+s);  
    System.out.println("最少的张数:"+mincoin);  
    }
}
原文地址:https://www.cnblogs.com/java-7/p/7162048.html