/*
name:
author:
date: 31-12-14 16:51
description:
找零錢的方法數量
描述 我們知道人民幣有1、2、5、10、20、50、100這幾種面值。
現在給你n(1≤n≤250)元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。
比如4元,能用4張1元、2張1元和1張2元、2張2元,三種表示方法。
輸入 輸入有多組,每組一行,為乙個整合n。
輸入以0結束。
輸出 輸出該面額有幾種表示方法。
樣例輸入
1 4
0 樣例輸出
1 3
*/
#include#include#include#define max 7
int a[max] = ;
int count = 0;
void numchange_1(int n, int top, int s);//回溯法
int numchange_2(int n); //動態規劃法1
int numchange_3(int n); //動態規劃法2
int main()
return 0;
}
void numchange_1(int n, int top, int s)
if (top < 0)
return ;
numchange_1(n, top-1, s); //先不用a[top]這種貨幣看看
for (i=a[top]; i<=n; i+=a[top])
}
int numchange_2(int n) //動態規劃法1
;//f[m][n]的含義為用m張鈔票構成的金額為n的組合數量
int i, j, k, min, max;
for (i=0; ia[i]) ? j : a[i]; //為避免無效運算,給k值規定乙個上限和下限
max = (n <= j * a[i]) ? n : j * a[i];
for (k=min; k<=max; k++)//金額總數
}
} for(k = 0, i = 1; i <= 100; k += f[i++][n]);
return k;
}
//因為鈔票的張數最小肯定是1,故第二層迴圈遍歷金額總數,第三層迴圈遍歷鈔票張數,只需規定一下鈔票的最大張數就行了,比演算法2簡單
int numchange_3(int n) //動態規劃法2
;//f[m][n]的含義為用m張鈔票構成的金額為n的組合數量
int i, j, k, max;
for (i=0; i}
} k = 0;
for(i=1; i<=100; i++)
k += f[i][n];
return k;
}
找零錢的兩種方法
有時候,去便利店買幾塊錢的東西,但沒有零錢,只能給他們一張100的,他們可能找給我一沓10塊的和幾枚硬幣。我不喜歡這麼多的零錢,要知道,錢越零散,散失地就越快,我希望找給我的零錢張數最少。如何找出最少數目 錢的張數 的零錢呢?這個問題看起來很簡單,假設要用50 20 10 5 1 元 找出87元來,...
找零錢的兩種方法
有時候,去便利店買幾塊錢的東西,但沒有零錢,只能給他們一張100的,他們可能找給我一沓10塊的和幾枚硬幣。我不喜歡這麼多的零錢,要知道,錢越零散,散失地就越快,我希望找給我的零錢張數最少。如何找出最少數目 錢的張數 的零錢呢?這個問題看起來很簡單,假設要用50 20 10 5 1 元 找出87元來,...
用python實現零錢找零的三種方法
1.遞迴 recursion def coins changerec coin values,change 遞迴實現零錢找零 min count change base case if change in coin values return 1for value in i for i in coi...