Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 硬币兑换问题_C++_Dynamic Programming_Coin Change - Fatal编程技术网

C++ 硬币兑换问题

C++ 硬币兑换问题,c++,dynamic-programming,coin-change,C++,Dynamic Programming,Coin Change,假设我有4枚面值为1 3 4 5的硬币。我想定在7点。我学会了如何找到可以做到的方法。但我想确定,要做到这一点,必须使用的最小硬币数量是多少。示例:5+1+1=7再加上3+4=7。所以硬币的最小数量是2。任何伪代码、解释或源代码都会很有帮助如果您想更改数字n,请设置一个硬币[n]的数组编号\U,并从左到右填写。显然,硬币[0]的数量是0。接下来的几步你可以手工完成(尽管一旦你有了一个算法,它会自动填充)。要在数组中填充较大的条目m,请考虑以下问题:如果我从m中删除1美分会怎么样?还是3美分?还是

假设我有4枚面值为1 3 4 5的硬币。我想定在7点。我学会了如何找到可以做到的方法。但我想确定,要做到这一点,必须使用的最小硬币数量是多少。示例:5+1+1=7再加上3+4=7。所以硬币的最小数量是2。任何伪代码、解释或源代码都会很有帮助

如果您想更改数字n,请设置一个硬币[n]的数组编号\U,并从左到右填写。显然,硬币[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);
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);
}
这是一段粗略的代码,可能需要调整,但我认为递归函数可以在这里工作。我看到的一个紧迫问题是,我在这里写的顺序并不重要,你可以得到副本,但有一种方法可以解决这个问题


编辑:我让它工作,但不会张贴代码在这里。这种方法很有效,如果您选择尝试,请随时提出您需要的任何问题,我会尽力提供帮助。

该网站不是这样工作的^。你需要告诉我们你做了什么/写了什么/研究了什么,如果你在某一点上陷入困境,那会有所帮助。@AbhinavGauniyal错了。所以不应该是一个免费的家庭作业解决者。但事实上,出于某种奇怪的原因,它一直都是这样工作的;(请参阅下面的答案。请求帮助的问题需要包括您尝试过的内容和获得的结果,否则将被视为离题。