某国的货币系统包含面值不同的n种硬币(设每个面值的硬币有足够多),现需要找零m元。求找零的最少硬币数。
输入格式:
第一行一个n和m(n<=10,m<=10
5
)。
第二行n个数,代表n个硬币的面值,单位元。
输出格式:
一个整数,代表找零的最少硬币数。
输入样例:
4 10
1 4 16 64
输出样例:
4
表示2个4元的硬币和2个1元的硬币是最少找零硬币数。
#include <stdio.h>
int x[100], f[100000];//定义数组,x[]代表各面值,f[]代表硬币数
int min(int a, int b) { //c语言设置一个两值取最小值的函数。备用
if(a < b)return a;
else return b;
}
int main() {
int n, m; //n代表币种,m代表零钱值
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++) {
scanf("%d", &x[i]);
}
for(int i = 1; i <= m; i++) {
f[i] = 0x3f3f3f;//f数组内取无穷大,以便取最小值
for(int j = 1; j <= n; j++)
if(i >= x[j])
f[i] = min(f[i], f[i-x[j]]+1);//f(1)=1,f(2)=2,f(3)=3,f(4)=1,f(5)=2,f(6)=3,f(7)=4,f(8)=2,f(9)=3,f(10)=4,十轮后打完收工
}
printf("%d", f[m]);//输出
return 0;
}