硬币兑换问题
Coin Change Problems
>假设我有4枚面额为1 3 4 5的硬币。我想让它成为 7.我学习如何找到多少种可能的方法。但我想确定必须使用的最小硬币数量是多少。示例:5+1+1=7 再次 3+4=7。所以硬币的最小数量是2。任何伪代码或解释或源代码都会有所帮助
如果要更改数字 n,请设置一个数组 number_of_coins[n] 并从左到右填写。 显然,number_of_coins[0] 是 0。接下来的几个你可以手动完成(尽管一旦你有了算法,它就会自动填充它们)。要在数组中填写较大的条目 m,请考虑以下情况:如果我从 m 中删除 1 美分会怎样?还是3美分?还是4美分?还是5美分?
一旦你拥有最多n个硬币数组,你可以向后走过它以找到要使用的确切硬币。
我会试一试。 我认为你应该定义一个面额的向量:
vector<int> denominations {1,3,5,7};
从那里,编写一个递归函数,该函数接收面额以及从面额中获得的金额:
int recursive_totals(const vector<int> denominations, int amount_to_make);
如果amount_to_make
小于或等于 0,此函数将返回 0,否则它将遍历面额:
int sum_totals = 0;
for (int denom : denominations)
{
if (amount_to_make - denom == 0)
sum_totals+=1;
else
sum_totals+=recursive_totals(denominations, amount_to_make - denom);
}
这是粗略的代码,可能需要调整,但我认为递归函数在这里有效。 我看到的一个直接问题是顺序与我在这里编写的方式无关紧要,您可能会得到重复项,但是有一种方法可以解决这个问题。
编辑:我让它工作,但不会在这里发布代码。 这种方法有效,如果您选择尝试,请随时提出您需要的任何问题,我会尽力提供帮助。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何在硬币兑换问题中找到硬币的数量
- 用给定面值的最小硬币数量计价金额.贪婪的问题
- 硬币兑换问题
- 修改硬币更换问题以跟踪使用了多少硬币(不是最小数量)