【发布时间】: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