將1美元(100美分)換成半美元,1/4美元,10美分,5美分,1美分的零錢,一共有多少種換法?書上寫的思路很簡單,就是把一美元換成:1:半美元+其他5種硬幣的組合;2:不加半美元,其他4種硬幣的組合;數學函數是,f(m,n)=f(m-coin[n-1],n)+f(m,n-1);不過有特殊情況:1:... ...
將1美元(100美分)換成半美元,1/4美元,10美分,5美分,1美分的零錢,一共有多少種換法?
書上寫的思路很簡單,就是把一美元換成:
1:半美元+其他5種硬幣的組合;
2:不加半美元,其他4種硬幣的組合;
數學函數是,f(m,n)=f(m-coin[n-1],n)+f(m,n-1);不過有特殊情況:
1:m=0時,表示有1種組合;
2:m<0或n=0時無法組合;
綜上,代碼如下:
1 /* 2 2019,3,10 3 from SICP ChangeCoin by sky 4 */ 5 #include<iostream> 6 using namespace std; 7 int ChangeCoin(int money,int n); 8 int Coin[5]={1,5,10,25,50}; //type of coins 9 int main(void){ 10 int money,n; 11 int type=0; 12 cout<<"money:"; 13 cin>>money; 14 cout<<"n:"; 15 cin>>n; 16 type=ChangeCoin(money,n); 17 cout<<"type:"<<type<<endl; 18 return 0; 19 } 20 int ChangeCoin(int money,int n){ 21 if(money==0){ 22 return 1; 23 } 24 else if(money<0||n==0){ 25 return 0; 26 } 27 else{ 28 return ChangeCoin(money-Coin[n-1],n)+ChangeCoin(money,n-1); 29 } 30 }