最少钱币数:

Posted 夜空中最亮的星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最少钱币数:相关的知识,希望对你有一定的参考价值。

最少钱币数

【问题描述】

这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了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);  
    }
}

 

以上是关于最少钱币数:的主要内容,如果未能解决你的问题,请参考以下文章

钱币兑换问题

HDU 1284 钱币兑换问题 (动态规划 背包方案数)

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

HDU 3591 多重背包

背包专题H - 钱币兑换问题 hdu1284完全背包

8P-钱币兑换问题