最少錢幣數:
阿新 • • 發佈:2017-07-13
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); } }
最少錢幣數: