algorithm - 如何在给定一些美元值(value)时找到所有硬币组合

标签 algorithm recursion puzzle coin-change

<分区>

我找到了几个月前为面试准备编写的一段代码。

根据我的评论,它试图解决这个问题:

Given some dollar value in cents (e.g. 200 = 2 dollars, 1000 = 10 dollars), find all the combinations of coins that make up the dollar value. There are only pennies (1¢), nickels (5¢), dimes (10¢), and quarters (25¢) allowed.

例如,如果给出 100,则答案应为:

4 quarter(s) 0 dime(s) 0 nickel(s) 0 pennies  
3 quarter(s) 1 dime(s) 0 nickel(s) 15 pennies  
etc.

我相信这可以通过迭代和递归两种方式解决。我的递归解决方案有很多问题,我想知道其他人会如何解决这个问题。这个问题的困难部分是使其尽可能高效。

最佳答案

我很久以前调查过一次,你可以阅读我的 little write-up on it .这是 Mathematica source .

通过使用生成函数,您可以获得问题的封闭形式的恒定时间解。 Graham、Knuth 和 Patashnik 的 Concrete Mathematics 就是这本书,其中包含对该问题的相当广泛的讨论。本质上,您定义了一个多项式,其中第 n 个系数是为 n 美元找零的方法数。

文章的第 4-5 页展示了如何使用 Mathematica(或任何其他方便的计算机代数系统)在几秒钟内用三行代码计算出 10^10^6 美元的答案。

(这是很久以前的事了,在 75Mhz 的奔腾处理器上那是几秒钟…​​…)

关于algorithm - 如何在给定一些美元值(value)时找到所有硬币组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1106929/

相关文章:

c++ - 置换成本

c - 删除带有结构元素的单链表

SQL查找子行相对于顶部父行的深度

algorithm - 修改后的最小硬币变化

algorithm - OCR纠错算法

arrays - 查找数组的所有子数组的所有元素的乘积

algorithm - 如果我们以自上而下的方式迭代 build-max-heap 会发生什么

c - 如何将此代码更改为递归函数?

prolog - 在 Prolog 中解决逻辑难题(Kuromasu,黑细胞在哪里)

algorithm - 标准难题的解决方案