c語言趣題之「找零錢的方法數量 」

2021-06-27 23:19:12 字數 1577 閱讀 4526

/* 

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...