划分和征服用有限硬币进行更改的算法

时间:2013-10-21 16:53:40

标签: algorithm divide-and-conquer

该算法应该只使用硬币,镍币和硬币找到可以对输入量进行更改的方式。我的方法是使用分而治之的策略并通过找到可以用最大的硬币,一角硬币以及不使用一角硬币进行更改的方式的数量来改变方法来分解问题。我已经为这个算法编写了一个实现,它可以正确地解决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;
     }
}

非常感谢。

2 个答案:

答案 0 :(得分:2)

提示:

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和其他函数。

答案 1 :(得分:0)

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

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