当前位置: 首页 > 知识库问答 >
问题:

获得价值所需的最小硬币数量[重复]

魏健柏
2023-03-14

给定一个硬币面额列表,我需要找到获得给定价值所需的最低硬币数量。

我使用贪婪算法的方法,

将值除以最大值,取余数值,再除以第二个最大值,依此类推,直到得到所需值。

但是这种方法在某些情况下失败了。

我很想知道

  1. 适用于所有情况的方法

方法失败的例子。

硬币面额(1,3,4,5)

所需值7

使用贪婪方法

(7/5)=1和2因为3和4不能使用,所以我们需要使用2 1的价值硬币。所以总共3个硬币。

然而,最佳值是4 3(2枚硬币)。

共有2个答案

司马奇希
2023-03-14

比方说,你想得到价值“2,10欧元”,得到价值为2,1,0.50,3乘以0.20的硬币。

贪婪总是会先拿走最大的硬币,所以它会选择价值2的硬币。现在已经不可能达到2,10,因为你没有价值0.10的硬币,即使如果你选择1,0.50和3 0.20硬币也是可能的。

在这种情况下(就像在大多数情况下一样),我建议您使用回溯,在这种情况下不会失败。

杜英叡
2023-03-14

你所描述的问题有一个经典的解决方案——一种背包问题。它可以用动态规划方法求解。为了获得清晰的解释,您可以按照本教程进行操作

 类似资料:
  • 具体而言,问题是: 给定面额数组<代码>硬币[],每个硬币的限制数组<代码>限制[]和数量<代码>金额,返回所需的最小硬币数量,以获取<代码>金额,或者如果不可能,返回空值。另外,用溶液中使用的每个硬币的数量填充数组 这是我的解决方案: 但它一般不起作用。 我的问题是,例如,在这种情况下: 最佳解决方案是: 并且我的算法给出作为结果。换句话说,它失败了,每当在某种情况下,我将不得不使用比可能的更少

  • 给出了一个大小为n的数组,其中表示位置处的硬币数量。“移动”包括将一定数量的硬币从位置移动到位置或。重新分配硬币所需的最小移动次数是多少,这样每个位置上正好有一枚硬币?你被保证有相同数量的硬币与有的插槽,以分配他们。 例如,给定输入 输出为 null 解决这个问题的有效方法是什么?

  • 在研究硬币更换问题后,我尽力实施解决方案。到目前为止,我的代码打印了给定金额所需的最低硬币数量。然而,它并不打印出每种硬币面额所需的数量。这是我的代码目前的样子: 我只是很困惑如何/在哪里填充numOfCoins[]。

  • 所以我对编码不熟悉,我得到了一个任务,我需要做一个程序,用四分之一、一角、五分和一美分给不到一美元的零钱。然而,作业希望程序打印所需的最低硬币数量(例如,如果我输入58美分,那么输出应该是“2个25美分,1个镍和3个便士”,而不是“2个25美分,0个10美分,1个镍和3个便士”。本质上,如果没有某种硬币,那么程序就不应该打印它)。我一直在想如何制作它,这样程序就不会打印任何不必要的硬币。 这就是我

  • 问题内容: 这个问题已经在这里有了答案 : 使用Java在原始数组中查找最大值/最小值 (15个答案) 5年前关闭。 这是我的代码。我需要获取数组的最小值,最大值才能为我获取范围,无论何时输入数字,最小值均为0。请帮助我。谢谢:) 问题答案: 同样,通过更改较小的符号可以找到最小值。

  • 给定一组面额和所需的总和我必须找到最低数量的硬币使该总和以及硬币的数量为每个面额 请帮忙!!