67.貨幣組合問題

編程題目:

67.貨幣組合問題:計算對於1元錢,共有多少種組合方法(假設組合時可以使用的貨幣包括1元,5角,2角,1角,5分,2分,1分。比如,如果M爲1分,則共有1種組合方法,即1分;如果M爲2分,則共有2種組合方法,即2個1或1個2分),只要求返回組合方法的個數,不要求輸出具體組合方式。

示例代碼:

package program.calculation.exercise67;

/**
 * 67.貨幣組合問題:計算對於1元錢,共有多少種組合方法
 * (假設組合時可以使用的貨幣包括1元,5角,2角,1角,5分,2分,1分。
 * 比如,如果M爲1分,則共有1種組合方法,即1分;如果M爲2分,則共有2種組合方法,即2個1分或1個2分),
 * 只要求返回組合方法的個數,不要求輸出具體組合方式。
 */

public class MoneyCombine {  
    public static void main(String[] args) {
		
    	System.out.println("示例(M爲1分時):");
    	System.out.println(count(1, 1)+1);
    	System.out.println("示例(M爲2分時):");
    	System.out.println(count(2, 2)+1); 

    	System.out.println("問題(M爲1元,即100分時):");
        System.out.println(count(100, 100)+1);  
    	
	}
  
    //遞歸求組合方式數
    //add:加數,即可使用的貨幣分值
    //sum:和,即100分,1元,要達到的貨幣分值
    private static int count(int add, int sum) {  
    	
        if (add <= 1) {  
            return 0;  
        } else {  
            int number = sum/add; // 當前可取值的個數  
            int count = number;  
            for (int i=0;i<number;i++) {  
                count += count(getNextAdd(add), sum-(i*add));; 
                
            } 
            return count;  
        }  
        
    }  
  
    //獲取下一個加數
    private static int getNextAdd(int add) {  
    	
    	int[] adds = {100, 50, 20, 10, 5, 2, 1 }; 
    	
        for (int i=0;i<adds.length;i++) {  
            if (add == adds[i]) {  
                return adds[i+1];  
            }  
        }  
        return 0; 
        
    }  
}

結果顯示:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章