【问题标题】:Divide and conquer algorithm for making change with limited coins用有限硬币找零的分而治之算法
【发布时间】:2013-10-21 16:53:40
【问题描述】:

该算法应该仅使用一角硬币、五分硬币和一分硬币来找出可以对输入金额进行更改的方式数。我的方法是使用分而治之的策略,通过找出用最大的硬币、一角硬币可以做出改变的方法的数量以及不使用一角硬币做出改变的方法的数量来分割问题。我已经为这个算法编写了一个实现,它可以正确解决来自 1...14 的输入的问题,但是当输入等于或大于 15 时,返回的结果不正确。显然我的算法是错误的,我想知道需要进行哪些更改来修复代码,以及我的方法是否是一个适当的分而治之的解决方案。

代码如下:

    public static int makeChange(int n) {

        if(n < 0)
            return 0;
        else  {

        int sum = makeChange(n-10) + makeChange(n-5) + 1;

        return sum;
     }
}

非常感谢。

【问题讨论】:

  • makeChange2 看起来像什么?也发一下。
  • 动态编程比分而治之更适合这个问题。
  • "当输入等于或大于15时返回结果不正确。"你得到了什么结果?你期待什么结果? (或者你只是要给我们留下“不正确的”??)。我还指出,您在帖子中的任何地方实际上都没有提出问题

标签: algorithm divide-and-conquer


【解决方案1】:

提示:

int nways_10 (int n) {
    int s = 0;
    int d = n / 10;

    for (int i = 0; i <= d; ++i) {
        s += nways_5 (n - 10*i);
    }

    return s;
}

如果需要,您应该了解如何编写nways_5 和其他函数。

【讨论】:

  • 只是为了解释这里发生了什么:对于您可以使用的每个可能的硬币数量,找出在不使用任何硬币的情况下改变剩余的方法的数量。
【解决方案2】:

您可以从我的回答中获得基本算法:https://stackoverflow.com/questions/19440228/creating-a-function-that-returns-combinations-of-change/19440582#19440582

你需要修改它而不是输出你应该返回 1,并汇总所有的以显示计数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2019-07-17
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多