我正在寻找一种计算变化面额的解决方案。 我的问题有面额:50& 20。
所以给定金额:130,应该是1x50 + 4x20, 和数量:80,应该有0x50 + 4x20等
我已经尝试查找硬币问题,但无法得到一个不错的答案,当有多于两种类型的面额时,硬币问题似乎有一堵砖墙(从我读过的内容)。 / p>
有没有完整的解决方案?或者最好是超过2种面额类型的解决方案?
我还希望能够提供一定数量的每种可用面额。
如果你能用pseedo代码解决,可以获得奖金
答案 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)
答案 4 :(得分:-2)
只需减去最大面额即可。 IE保持减去50秒,直到剩下的是<50,然后继续减去20秒。无论你有多少面额,这都有效。