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

货币兑换Altorith(Android/Java /Pseudocode)

穆铭晨
2023-03-14

我很难找到解决汇率问题的好办法。我花了一整天的时间来思考这个问题,并为所有情况提供了优雅而快速的解决方案。

声明:

我们有一些汇率,比如。。。

  • 欧元兑美元-

这个利率不是真实的,可能每天变化一次。利率的数量可能和世界上的货币一样大(大约150种)。

我们被要求将一笔钱从任何一种货币兑换成另一种货币,我们应该根据汇率给出答案(如果可以的话)。

最好的情况是,如果你的汇率是直接的(出现在清单上),在最坏的情况下,你应该在中间汇率上跳很多次。

注:考虑到欧元对美元,你可以假设美元对欧元是相反的。

我希望问题很清楚。

有什么想法吗??

共有2个答案

唐炳
2023-03-14

我基本上同意帕特里夏的观点。但这个问题肯定也与避免套利有关。因此,它可以归结为从a货币到B货币的“最短路径”(最低成本)。最短路径算法得到了充分的研究和记录。在cormen和rivest查找它们。

涂浩皛
2023-03-14

构造一个加权有向图,每个顶点都标有货币名称。如果你有货币a到B的汇率,用汇率作为权重添加一个边(a,B)。

如果有(A,B)边,但没有(B,A)边,则将权重为1的(B,A)边加上(A,B)权重。

要将货币C转换为D,请应用最短路径算法,找到从C顶点到D顶点的最小权重路径。如果没有这样的路径,则无法进行转换。请参见具有非负权重的有向图。

=======================================================================================

这不一定能找到最佳汇率,因为汇率会成倍增长。通过使用汇率对数作为边缘权重,并使用可处理负边缘权重的最短路径算法,可以找到最佳汇率。

要找到交换次数最少的交换路径,请为每个与直接交换匹配的边赋予权重1。

 类似资料:
  • 我在理解动态规划中的硬币兑换问题时遇到了一个小问题。简单地说,我必须用最少数量的硬币来兑换一笔钱。 我有n种面值为1=v1的硬币

  • 我试过... 但那就不允许便士条目了。 我想要增量按钮控制在英镑上升,但仍然想要输入便士的能力。 谢谢,1DMF

  • 我编写的代码使用动态规划解决了基本的硬币兑换问题,并给出了进行兑换所需的最小硬币数量。但是我想把每个硬币的数量存储在最小的数字里。 我试图做的是初始化数组,就像散列一样,只要找到,它就会增加的数量,即。但这并不是我想要的方式,因为它每次发现对应于时都会添加硬币。因此,在最终答案中,数字不是硬币的最终计数。 代码如下:

  • 我试图自己解决LeetCode问题322。硬币兑换: 您将获得一个整数数组,表示不同面额的硬币,以及一个整数金额,表示总金额。 返回您需要的最少数量的硬币,以弥补该金额。如果这些硬币的任何组合都无法弥补这一数额,则返回-1。 你可以假设每种硬币的数量是无限的。 我似乎有一个错误,无法找出它。 我用DFS解决,基本上是说当目标达到0时,只需将所有的聚集在一个数组中,并动态地保持尽可能短的结果。这是问

  • 但是我们不能这样做吗:(是给定的可用硬币的排序集,和是它的下标,是给定的最高价值硬币) 我写的东西有什么问题吗?虽然解决方案不是动态的,但不是更有效吗?

  • 在硬币系统C={c1,c2,…ck}中,应改变给定的数量x,以使每个硬币ci具有给定的重量wi。我们想计算可能变化的总重量。两种变化是不同的,如果他们包含在不同的顺序相同的硬币。 如何给出上述问题的动态规划递归?我知道最小硬币兑换问题的递归(即C(x)=min{C(x-C)1 for x