package test;
import java.util.Stack;
class Money {
int fen;
int number;
}
public class Temp {
static Stack<Money> stack = new Stack<Money>();
// 假设只有1角,5分,2分和1分。如果更多,请自行添加,记得金额从大到小排列
static int[] nums = new int[] { 10, 5, 2, 1 };
public static void fen(int target, int sum, int index) {
for (int i = index; i < nums.length; i++) {
int num = nums[i];
if (num > target) { // 如果面值超过找零的数值,则忽略
continue;
}
Money m = new Money();
m.fen = num;
stack.push(m);
while (sum + num <= target) {
m.number++;
if (sum + num == target) {
showResult();
}
sum += num;
}
fen(target, sum, i + 1);
stack.pop();
sum -= m.fen * m.number;
}
}
private static void showResult() {
for (Money m : stack) {
if (m.number > 0) {
System.out.print(m.fen + ":" + m.number + " ");
}
}
System.out.println();
}
public static void main(String[] input) throws Exception {
fen(17, 0, 0); // 测试找1角7分
}
}
运行结果
10:1 5:1 2:1
10:1 5:1 1:2
10:1 2:3 1:1
10:1 1:7
5:3 2:1
5:3 1:2
2:8 1:1
1:17
分享到:
相关推荐
- 如果我们能用 `dp[i - t] + 1` 个硬币找零 `i - t` 面额,那么 `dp[i]` 就可以更新为 `min(dp[i], dp[i - t] + 1)`,其中 `t` 是当前考虑的硬币面值。 - 当无法用任何硬币组合成目标金额时,`dp[Money]` 应该为 `...
1. **问题定义**:给定一个正整数金额`n`和一组硬币面额`coins`,目标是找到使用最少数量的硬币来组成`n`的方法。 2. **递归解法**:一种直观的解决方案是采用递归。我们可以尝试用最大的硬币面额来尽可能多地匹配...
初始条件是C[i][0] = 0(表示找零为0时不需要任何硬币),而C[1][j]取决于j是否能被第一个硬币面值整除。 接下来,是最小M段和问题。这个问题涉及到寻找一个数组中连续的M个元素的和,使得这M个元素的和最小。虽然...
在找零钱问题中,我们希望用最少数量的硬币找零。贪心策略是每次都选取最大面值的硬币,直到找零金额不足以再支付一枚最大面值的硬币时,再选择次大的硬币,依此类推。例如,在这个问题中,如果需要找零33美分,贪心...
假设我们要解决一个典型的硬币找零问题,即给定一组面额的硬币,找出最少的硬币数量来凑出指定金额。这是一个典型的贪心算法应用场景。例如,假设有面额为1元、2元、5元的硬币,我们需要凑出10元。 按照贪心算法的...
1. **定义数组**:首先定义了一个大小为1000的数组`b`用于存储不同金额对应的最少硬币数量,以及一个包含面额的数组`a`。 2. **初始化**:设置`b[0]=0`。 3. **状态转移**:使用双重循环来更新数组`b`: - 外层循环...
- **选题5: 硬币找零** - **描述**: 给定不同面额的硬币数量和总金额,寻找最少硬币数量及其组合。 - **数据结构**: 数组或哈希表存储面额和数量。 - **算法**: 动态规划算法。 - **选题6: 迷宫问题** - **描述...
- **最少找硬币问题(贪心策略-深搜实现)**:解决找零问题,即如何使用最少数量的硬币找零。 - **棋盘分割**:将棋盘分割成若干个特定形状的问题。 - **汉诺塔**:解决汉诺塔问题,即将圆盘从一根柱子移动到另一根...
例如,硬币找零问题中,贪心地选取面值最大的硬币优先找零;活动选择问题确保最大的活动数量得以执行;多机调度问题和小船过河问题都要求在有限资源下最大化效益;分发饼干问题考虑满足每个人口味的同时最大化满意度...
这个问题中,我们需要确定最少数量的硬币来凑够给定的金额。C语言可以通过自底向上的动态规划策略来解决此类问题。 “问题算法”可能涵盖了多种不同的算法,例如排序(冒泡排序、快速排序、归并排序等)、搜索...
给定一组不同面值的硬币和需要找零的金额,目标是找出使用最少数量的硬币来达到这个金额。这可以通过动态规划方法解决。对于每个金额,我们可以计算出使用当前硬币面值集合最少需要多少个硬币。状态转移方程可以表示...
- **递归情况**:假设在最优解中第一次使用的硬币面额是di (其中di ≤ p),则剩下的硬币组合必须是以p-di元作为目标金额的最优解。因此,如果di是首次使用的硬币,则: - C[p] = 1 + C[p-di]。 但是我们并不知道最...
6. **硬币找零**:给出不同面值的硬币,求解最少的硬币数量来凑成目标金额。 7. **编辑距离**:计算两个字符串之间的最小编辑操作次数,使其变成对方。 通过深入理解和熟练运用动态规划,可以有效地解决这些面试题...
设计一个方法使得用最少的硬币支付指定金额,通常采用贪心算法或动态规划。对于给定的面额,我们总是先尝试用最大面额的硬币,直到无法整除,然后选择次大的面额,以此类推。 7. 分治算法 分治策略在第三题中被提及...
- 特殊的二分查找变种,用于查找第一个大于等于给定值的元素。 - **所有数位相加** - 计算一个数字所有位上数字之和。 ##### 数论 (Number Theory) - **递推求欧拉函数PHI(I)** - 欧拉函数PHI(N)表示小于等于N...
在这个例子中,我们有面额为10元、5元、2元和1元的硬币,对应的数量分别为3个、5个、7个和12个。目标是找零16元,要求使用的硬币数量最少。 分析与解法: 我们可以将这个问题看作是状态空间的搜索问题。状态空间由...
问题的目标是使用最少数量的硬币来凑成特定金额的找零。解决此问题的一个有效方法是使用动态规划,构建一个二维数组来存储每种金额下达到最少硬币数的状态。通过逐步计算,我们可以得到最优解。动态规划方法的掌握有...
**最少找硬币问题(贪心策略-深搜实现)**:通过贪心策略结合深度优先搜索来解决最少找零的问题。 **棋盘分割、汉诺塔**:经典的递归问题,通过递归的方式寻找解决问题的策略。 **STL中的PRIORITY_QUEUE**:标准...
这个问题通常被描述为:给定不同面值的钱币(硬币)和一个总金额,目标是找出最少数量的钱币来凑出这个总金额。这在实际应用中可能涉及到找零问题或者资源分配优化。 动态规划是解决此问题的核心方法。动态规划是一...
10. **硬币找零问题**:给定不同面额的硬币,求解找零的最少硬币数,dp[i]表示找零i元所需的最少硬币数。 11. **约瑟夫环**:动态规划可以解决约瑟夫环问题,即每隔一定数目的人报数,报到的人出局,最后剩下的人是...