一种算法,用于查找要添加到充值卡中的确切金额

时间:2017-03-19 02:41:47

标签: c++ algorithm

总体目标

找到添加到充值卡中的最低金额,以便卡上的余额可以完全用完。在数学上,它类似于this

的已知,

起始号码 - 卡上留下的金额。

价格集 - 可以从卡中扣除的单个价格集。

最低充值 - 您可以添加到卡中的最低金额。

最小增量 - 你只能以25p的增量加满(例如£5.25而不是5.10英镑)

背景

我住在一个公寓大楼里。每个人都必须使用洗衣房,由一家名为Circuit的公司管理。他们有一个非常复杂的充值系统,每年从搬出的人那里赚到数千英镑,在他们的卡上留下少量的钱。我想制作一个算法,可以准确地告诉你要添加到你的卡中多少钱来完全归零。

我编写的算法可以做到这一点,但只适用于一个“项目”。它会告诉你添加足够的8个低质量的洗涤剂,例如,可以增加购买3个中等质量的洗涤剂和2个干洗剂。

我或许应该补充一点,这主要是学术活动;为了好玩。

您可以在此处查看我在C ++中的暂定实现: https://github.com/SilverSkyes/F__kYouCircuit/blob/master/F__kYouCircuit/main.cpp

1 个答案:

答案 0 :(得分:1)

您描述的问题通常是一个非常棘手的问题,因为它与knapsack problem有关。但是,如果您在卡上支付非常大的金钱和很多不同的价格,那就很难了。

对于你的现实世界问题,只有很少的不同价格,你可以通过完整的枚举解决这个问题:说你有一个固定的上升量c和价格p_1 $,...,p_n创建深度为n的嵌套循环,如此

<table>
    <tr>
        <td>David<td>
        <td>John<td>
        <td>Brian<td>
    </tr>
    <tr>
        <td>Emily<td>
        <td>Donald<td>
    </tr>
</table>