1. 程式人生 > >最少錢幣數:

最少錢幣數:

tint string ann new 2個 lastindex align sub 字符串

最少錢幣數

【問題描述】

這是一個古老而又經典的問題。用給定的幾種錢幣湊成某個錢數,一般而言有多種方式。例如:給定了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); } }

最少錢幣數: