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

在n个硬币中发现假币的算法

杭令
2023-03-14

所以这是一个经典的问题,在一套硬币中找到一个假币,只使用一个称重天平。为了完整起见,这里有一个这样的问题的例子:

一个著名的例子有九个(或更少)物品,例如硬币(或球),它们的重量相同,除了一个,在这个例子中它比其他的更轻--一个假币(一个奇怪的球)。差别只有在秤上称重才能察觉--但只有硬币本身才能称重。仅用两个称重就能将假币隔离吗?

我们所处理的情况是,只有一枚硬币是假币,而且我们知道它是怎么回事(即,我们知道它较重/较轻)。

我的问题是,对于带有一个假币的n硬币,有没有一个通用的高效算法来解决这个问题的广义版本。我一直在想,到目前为止,我认为如果N的形式是3^k,那么您可以通过将它们递归地拆分为三组来找到log_3_(N)中的假货。对于所有的N,而不是从3^k中的N,都是这样吗?如果是这样,我们能做得更好吗?

共有1个答案

康泽宇
2023-03-14

除非您有任何关于输入的额外信息,否则log_3_(N)是您所能达到的最好的。三组数量相等的硬币,将其中两个相互称重,你就会看到三组中哪一个的重量较轻。递归地将相同的算法应用于最轻的组。K^3以上的任何剩余硬币也将保留以备以后的回合使用。

 类似资料:
  • 只是在这里遇到了这个简单的算法,从相同的称重硬币列表中找到奇数硬币(重达重)。 我可以理解,如果我们一次拿3个硬币,那么最小称重次数只有两个。 我是怎么找到答案的? 我人工试了一下一次称4套硬币,一次称3套硬币,一次称两个硬币,一次称一个硬币。 当然,只有当我们一次拿3个硬币时,最少的步数(两步)才是可以达到的。 问题是,你怎么知道我们必须拿3个硬币? 我只是想知道如何解决这个难题,而不是做所有可

  • 我见过很多硬币更换问题,这个问题很独特。我尝试使用DP和递归,但我无法解决它。 这就是问题所在: 假设给定一个价格,X,其中X是美分,我有5种有限面额的硬币,1,5,10,20,50。我有不同数量的1、5、10、20、50分硬币。我想用最大数量的硬币来确定价格X。我该怎么做?(假设X总是可以用手头的硬币制作) 例如,如果价格X=52,并且 我有三枚一分硬币 我有四枚五分硬币 我有8枚10美分的硬币

  • 我正试图解决一个经典的动态规划硬币兑换问题。这是一个家庭作业问题,我不是在寻找完整的解决方案,只是想找几个指针看看我做错了什么。 输入: 金额我们想用硬币支付一些价值 集合表示面值(1c、5c、10c、25c、100c、200c)的可用硬币数量 输出: 需要换手支付的最低硬币数。 假设: 收银机操作员有无限的硬币供应,知道如何给最佳的变化。 到目前为止,我试图做的是: 我试图建立一个数组C,使得每

  • 首先,是的,这是我的硬件,我觉得很难,所以我真的很感激一些指导。 我需要证明对于当

  • 我正在尝试构建一个交换算法,以交换与库存数量相同的硬币。我有一本字典,里面有两个面值的键值对 输入是要返回的值,例如2,80欧元。考虑到股票,我需要一个算法来计算返回资金的最佳方式 (最好的方法是库存硬币数量的标准差最低,这意味着所有面额的库存都是相同的),因此在这个例子中,我需要返还120欧元的硬币 我怎样才能计算出最好的数字,以返回每面额使用c算法,并保持股票相同的所有硬币? 其中map Va

  • 动态规划变更问题(有限硬币)。我正在尝试创建一个以以下内容作为输入的程序: 输出: 输出应该是大小为1的数组,其中每个单元格代表我们需要改变单元格索引量的最佳硬币数。 假设数组的单元格位于index: 5,内容为2。这意味着为了给出5(INDEX)的变化,您需要2(单元格的内容)硬币(最佳解决方案)。 基本上,我需要这个视频的第一个数组的输出(C[p])。这与有限硬币的大区别是完全相同的问题。链接