Algorithm 兑换(面额)计算器

Algorithm 兑换(面额)计算器,algorithm,Algorithm,我正在寻找一种计算零钱面额的方法。 我的问题分为50分和20分 因此,如果数量为130,则应为1x50+4x20, 和数量:80,应该有0x50+4x20等 我曾试图查找硬币问题,但无法得到一个像样的答案,当面额上有两种以上的类型时,硬币问题似乎有一堵砖墙(从我所读到的内容来看) 有什么完整的解决办法吗?或者最好是两种以上面额类型的解决方案 我还希望能够提供每种可用面额的货币 如果你能用pseedo代码求解,那么你就可以继续减去你能减去的最大面额。如果你只有两种面额,那么问题就变成了: find

我正在寻找一种计算零钱面额的方法。 我的问题分为50分和20分

因此,如果数量为130,则应为1x50+4x20, 和数量:80,应该有0x50+4x20等

我曾试图查找硬币问题,但无法得到一个像样的答案,当面额上有两种以上的类型时,硬币问题似乎有一堵砖墙(从我所读到的内容来看)

有什么完整的解决办法吗?或者最好是两种以上面额类型的解决方案

我还希望能够提供每种可用面额的货币


如果你能用pseedo代码求解,那么你就可以继续减去你能减去的最大面额。如果你只有两种面额,那么问题就变成了:

find x and y such that 
a*x + b*y = c
这可以通过使用



如果您有3种以上的面额,最常见的解决方案是使用动态编程“暴力”的可能性。你可以在math.stackexchange.com上查看这个类似的问题,查看相对但更一般的问题

另外,这很好地解释了生成函数是如何解决一般问题的

如果您的问题仅限于两枚硬币,则更容易解决。

以下是代码解决方案:

不幸的是,代码非常难看,但应该能够轻松清理

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


贪婪的方法不起作用:如果你想用50美分和20美分的硬币总共得到80美分,唯一的解决方案是4x20,但贪婪的解决方案在50+20之后卡住,这将在130上失败。它将删除2x50,然后在20年代留下一些不可用的东西。是的,这只是一个垃圾算法,我不认为仅仅解决ax+by=c130失败,不管你是从50开始还是从20开始!除了你在寻找非负解,这很重要:有一个用整数对解集进行线性参数化,然后你做线性规划。对于3个以上的变量,可以使用左侧1xn矩阵的初等因子()分解,该矩阵可以在多项式时间内计算。你仍然必须限制使用非负解。我很乐意只使用两种面额的解决方案。你能解释一下两种面额的解决方案吗?在这里找到了一个解决方案:讨厌回答我自己的问题。。。