C语言中一百元换成一元五元十元有几种方式
时间: 2023-05-27 13:03:50 浏览: 214
假设要将一百元换成一元、五元、十元硬币,总共有多少种不同的换法?
这是一个经典的换零钱问题,可以使用动态规划和递归等方法解决。
下面给出基本的思路和递归代码,仅供参考。
将一百元换成一元、五元、十元硬币,可以考虑递归地枚举每一种硬币的数量。
假设当前还剩下 amount 元未换,需要考虑两种情况:
- 当前没有硬币可用,即所有硬币都已经用完了,这种情况只有一种可能,即全部用一元硬币换完(这里假设只有一元、五元、十元三种硬币可用);
- 当前仍有硬币可用,则可以考虑用一元、五元、十元三种硬币来换零钱。
具体地,假设当前有 n 个硬币可用,可以得到以下状态转移方程:
f(amount, n) = f(amount, n-1) + f(amount-coin[n], n)
其中,f(amount, n) 表示对于剩余 amount 元,可用的前 n 种硬币,总共有几种换法;
f(amount, n-1) 表示不使用第 n 种硬币的情况下,剩余 amount 元,前 n-1 种硬币的换法数量;
f(amount-coin[n], n) 表示使用第 n 种硬币的情况下,剩余 amount-coin[n] 元,前 n 种硬币的换法数量。注意这里的 coin[n] 表示第 n 种硬币的面值。
递归边界条件比较简单,即当 amount = 0 时,只有一种可能,即不用换零钱。
下面是基于上述思路的递归代码实现:
阅读全文