常用的递归解法
package test;
public class CoinToSum2 {
private static final int[] COINS = new int[] { 1, 2, 5, 10, 20, 50 };
private static final int SUM = 100;
private static int cnt = 0;
public static void main(String[] args) {
System.out.println(System.currentTimeMillis());
calc(0, 0, "");
System.out.println("total " + cnt + " solutions. ");
System.out.println(System.currentTimeMillis());// 110 ms
}
private static void calc(int sum, int coinIndex, String pre) {
if (SUM == sum) {
++cnt;
}
for (int i = coinIndex; i < COINS.length; i++) {
if (SUM - sum >= 0) {
calc(sum + COINS[i], i, pre + " " + COINS[i]);
}
}
}
}
这个消耗时间大概在110ms,比第1个逊色多了。。。而且代码晦涩难懂、不好理解
分享到:
相关推荐
标题中的“确定将一定数量的钱比如100,换成1,2,5,10,20,50元的组合问题(3)”是指一个经典的动态规划问题,也被称为“找零问题”。在这个问题中,我们需要找出所有可能的方式,用给定面值的硬币(1元、2元、5...
标题中的“确定将一定数量的钱比如100,换成1,2,5,10,20,50元的组合问题(4)”是指一个经典的动态规划问题,也被称为“找零问题”。在这个问题中,我们需要找出用特定面额的硬币(1元、2元、5元、10元、20元和...
- 同样的,通过练习,学生学习了如何用不同数量的1元、2元、5元等面额的货币来组合成12元、15元、110元、120元、150元等不同的总金额。 4. **实际支付问题**: - 练习题中涉及到实际购买物品的情景,如一个台灯65...
- 如:1张10元可以换成10张1元,或者5张2元,或者2张5元。 3. **比较人民币的大小** - 在比较人民币数值大小时,遵循数值比较的基本规则,比如50分等于5角,1元大于9角,7元大于7角等。 4. **人民币的找零计算**...
10元可以换成1张5元和2张2元,1张10元可以换成2张5元等。 5. **人民币的实际应用** - 在人民币应用室部分,涉及到实际的消费问题,如比较价格差异,计算购买数量,找零等。比如,如果转笔刀比文具盒便宜,需要计算...
- 探讨10元如何转换成不同数量的1元和2元,例如10元可以是5张2元,也可以是10张1元。 10. **实际应用**: - 除了基本的数学计算,题目还引导学生解决实际的购物问题,例如找回零钱、确定购买物品的总金额等。 ...
3. **填一填**:这部分主要是让学生理解面额和数量的关系,如2张5元是10元,1张20元可以换2张10元等。同时,也涉及到了乘法和加法的概念,如在2+2+2+2+2中,相同加数是2,相同加数的个数是5,可以写作5×2。 4. **...
换算关系中,例如1元可以换成10张1角的纸币,或者是100张1分的硬币。此外,学生还要学会理解和运用更复杂的换算关系,如3元等于30角,1元6角等于16角等。 读写钱数也是学生学习的重要内容。学生要学会正确地读出和...
排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的方法数,而组合是只考虑元素的选取,而不考虑选取后的顺序。在例4中,各种特殊情况下的排列数计算展示了排列和组合的应用。例如,当甲乙必须...
在计算机领域,组合数学可以帮助解决许多优化问题,比如图论中的问题、编码理论、数据结构的设计等。 在本PPT中,我们将重点讨论组合数学在解决实际问题中的应用,尤其是"单色三角形问题"。这个问题的设定是:在...
- 问题(1)要求将45000000000元转换成"亿元",即除以1亿,结果是450亿元。 - 问题(2)中69998000人省略万后面的尾数,就是四舍五入到万位,约为7000万人。 2. 单位换算: - 问题(2)涉及吨与千克、平方米与公顷的...
- **费波那契数列**:费波那契数列是一种经典的数列,定义为:F(0)=0, F(1)=1, 对于所有的n≥1, 有F(n)=F(n-1)+F(n-2)。这个数列在自然界和艺术中都有广泛的应用,如植物生长模式、音乐节奏等。 - **有趣的走路问题*...
将b+c代入第一个等式,得3a+2(100-a)=100,解得a=20。同理,b+c=80,b=2c。联立,解得b=40,c=40。所以需要20匹大马,40匹中马,40匹小型马。 13. 数列规律问题:这是一个基于数字组合的序列问题。观察给出的数字,...
这类电路由基本逻辑门(如与门、或门、非门等)组合而成,没有存储或反馈机制。每一个输出变量可以看作是输入变量的一个函数,例如L1=f1 (A1, A2, ..., Ai),其中f1是逻辑函数,L1是输出,A1, A2, ..., Ai是输入。 ...
例如,一张1元可以换成两张5角,也可以换成一张5角和五张1角,或者是十张1角和两张5角。这些转换不仅加深了孩子们对货币的理解,也锻炼了他们的逻辑思维能力。 最后,课件通过实际的应用问题,将前面学到的知识点...
例如,将3张1元、2张5角和5张1角组合起来,就是3元5角。通过这种组合拆分的训练,孩子们可以更加灵活地处理现实中的支付问题。 除了组合拆分,学会最简便的支付方式也是重要的生活技能。在购物时,合理选择支付方式...
1. **算法设计**:确定如何将一个数制的数字转换到另一个数制,包括逻辑步骤和数据结构的使用。 2. **代码实现**:根据设计的算法编写清晰、高效的代码,注意避免冗余和提高可读性。 3. **测试用例**:设计各种测试...
例如,面对280×50这样的乘法,我们不必直接计算每个数字的乘积,而是可以先忽略0,将280乘以5,得到1400,然后再将结果后加上一个0,因为有一个因数是100(即280中的0和50中的0组合),所以最终结果是14000。...
NFA转换为DFA的过程通常采用子集构造法,这种方法的核心思想是将NFA的所有可能状态组合成DFA的一个状态。具体步骤如下: 1. 初始化:创建一个空集合,记作Q0,它是DFA的初始状态,对应于NFA的所有可能初始状态的...