Advertisement

算法基于计算机思维解决经典硬币问题(附代码)

阅读量:

背景

题目如下:

现有12枚硬币,其中仅有一枚为假币,但无法确定假币是比真币轻还是重,如何在三次称量中确定哪一枚是假币?

这是一道非常经典的逻辑推理问题,初看之下似乎像是一个智力谜题,但实际上完全可以运用计算机的思维方式来进行系统性的分析。
若能掌握这种系统化的思考方式,便能够触类旁通,解决更多类似的问题。——毕竟不可能所有问题都依赖人工推理来完成,一旦数据规模扩大又该如何应对?例如,在面对39枚硬币且允许四次称量的情况下又该如何操作?

本题的核心在于:状态。——即天平所呈现的状态以及硬币可能存在的状态。

思路

首先,天平所处的状态仅有三种可能性:左侧较重、右侧较重或保持平衡。
若采用计算机语言进行描述,则左侧较重可表示为0、右侧较重表示为1、平衡状态则标记为2。
如此一来,单次称量的结果只能是0、1或2中的某一种。
而三次称量所得的结果,可以被表示为由三个0、1或2组成的组合——其本质等同于一个三位的三进制数。
例如,若三次称量的结果为010,则意味着第一次称量时左侧较重,第二次称量时右侧较重,第三次称量时左侧再次较重。
既然三次称量所呈现的状态总数为三进制三位数的可能值,即共有27种情况。

就硬币而言,共有12枚硬币,其中仅有一枚是假币,并且无法确定该假币是偏重还是偏轻。因此,在这种情况下存在

全部评论 (0)

还没有任何评论哟~