一个典型的变革问题,但有点扭曲。给定一个大的金额和面额,我需要想出总数的方式,其中金额可以使用RECURSION。函数的签名如下
int makeChange(int Amount, int[]面额)
总数
面额-可用面额。
关键是要了解在每一点上,你有两个选择:
金额减少时递归
不要使用它,并使其在以后选择时不可用
函数应该返回(1)和(2)的总和。
伪代码:
makeChange(amount,Denominations):
//stop clauses:
if (amount == 0) return 1
if (amount < 0) return 0
i <- first index of Denominations where Denominations[i] is not zero
if there is no such i (all are zero):
return 0
num1 = makeChange(amount-Denominations[i],Denominations) //recursive call, using Denominations[i]
temp <- Denominations[i]
Denominations[i] = 0
num2 = makeChange(amount,Denominations) //recursive call, not using Denominations[i] - and will never do again
Denominations[i] = temp //setting environment back to original
return num1+num2
java代码:
public static int makeChange(int amount, int[] d) {
if (amount < 0) return 0;
if (amount == 0) return 1;
int i = 0;
for (i = 0; i < d.length; i++) {
if (d[i] != 0) break;
}
if (i == d.length) return 0;
int num1 = makeChange(amount-d[i],d);
int temp = d[i];
d[i] = 0;
int num2 = makeChange(amount,d);
d[i] = temp;
return num1 + num2;
}
我正在用javascript解决“进行更改”的问题: 问题: 给定一定数量的货币,一组硬币面额,计算使用可用面额的硬币制造货币的方法的数量。 例子: 对于金额=4(4),面额=[1,2,3](1,2,2和3),您的程序将输出4-使用这些面额制作4的方法的数量: 1,1,1,1 1¢, 1¢, 2¢ 1¢, 3¢ 2¢, 2¢ 我找到了一个解决方案: 问题: 有人能给我解释一下发生了什么事吗?我试图
给定目标金额和硬币面额列表,我的代码应该找到达到目标金额所需的最少硬币。 示例: > 我们可以从3x253x1做78,所以需要6个硬币 48=2x24,因此2枚硬币就足够了 我们可以从2x161x3中得到35,所以3个硬币就足够了 我用for循环编写了代码,但如何使其递归?
我想做一个递归算法来解决做出改变的问题。是否可以使用非动态方法,不仅返回最小数量的硬币,还返回用于构成给定值的硬币集, 例如,给定值6和硬币组=[1,3,4]。有没有可能创建一个不记忆的递归算法,可以返回最小数量的硬币(2)和硬币集(3,3)? 编辑:这是我当前的算法,但它只返回硬币总数: 将返回3,但我希望它也提供集合{5,5,1}。第二个参数(2)是硬币的数量减去1。
此处所选项目应为项目1、项目4、项目5和项目6(60+60+80+40=240公斤) 实施例2:-袋最多可容纳180公斤的重量 项目1-60公斤、项目2-30公斤、项目3-55公斤、项目4-30公斤、项目5-70公斤、项目6-48公斤
你可以通过声明int,float,char和double类型的变量,来对它们做更多的事情,让我们来熟悉它们吧。接下来我们会在各种数学表达式中使用它们,所以我会向你介绍C的基本算术操作。 int main(int argc, char *argv[]) { int bugs = 100; double bug_rate = 1.2; printf("You have %d
我有以下问题: 有一组项目,每个项目有两个不同的正值a和B。 背包有两个值:totalA和totalB。这是所选项目值A和B的最大和。 我必须找出背包能装的最大物品数是多少。 示例: 输入: 总计A:10,总计B:15 项目1 A:3,B:4 项目2 A: 7,B: 2 项目4 A:2,B:1 项目5 A:4,B:6 输出: 3(项目:2、3、4) 如何使用动态规划来解决此任务?