改变(面额)计算器

时间:2011-03-21 14:18:43

标签: algorithm

我正在寻找一种计算变化面额的解决方案。 我的问题有面额:50& 20。

所以给定金额:130,应该是1x50 + 4x20, 和数量:80,应该有0x50 + 4x20等

我已经尝试查找硬币问题,但无法得到一个不错的答案,当有多于两种类型的面额时,硬币问题似乎有一堵砖墙(从我读过的内容)。 / p>

有没有完整的解决方案?或者最好是超过2种面额类型的解决方案?

我还希望能够提供一定数量的每种可用面额。

如果你能用pseedo代码解决,可以获得奖金

5 个答案:

答案 0 :(得分:1)

如果您只有两种面额,则问题变为:

find x and y such that 
a*x + b*y = c

这可以使用Extended Euclidean Algorithm

来解决

如果您有超过3种面额,最常见的解决方案是使用动态编程来“强力”使用这些可能性。您可以查看类似的question

答案 1 :(得分:0)

在math.stackexchange.com上检查相对但更一般的问题looking-to-understand-the-rationale-for-money-denomination

同样making-change-for-a-dollar-and-other-number-partitioning-problems,它很好地解释了生成函数如何解决一般问题。

如果您的问题仅限于两个硬币,那就更容易了。

答案 2 :(得分:0)

这是一个代码解决方案:http://www.codeproject.com/KB/recipes/coinChangeProblem.aspx

不幸的是,代码真的很丑,但应该能够轻松清理

答案 3 :(得分:0)

你可以使用简单的“贪婪算法”

http://en.wikipedia.org/wiki/Greedy_algorithm

答案 4 :(得分:-2)

只需减去最大面额即可。 IE保持减去50秒,直到剩下的是<50,然后继续减去20秒。无论你有多少面额,这都有效。