12币问题(微软面试试题)

这是一道数学题。

题目描述

今有12枚外观完全相同硬币,其中11枚是正品,质量完全相同;另一枚是次品,质量与正品严格不同。有一精准轻天平,在忽略空气阻力和重力加速度恒定的前提下,请设计一种方案,使得在仅用上述材料的前提下,至多称量3次便找出次品。

Solution

首先,你要想办法让你的每次称量变得更有意义。具体表现为:如果你只关心平还是不平,那么你至多只能判断出 2 3 = 8 &lt; 12 2^3=8&lt;12 23=8<12 种情况,这显然是不够优秀的。我们惊喜地发现, 3 3 = 27 &gt; 12 3^3=27&gt;12 33=27>12,所以这道题貌似可做。

考虑一种很直观的想法。如果我一次的称量不是对半分的,那么在最差情况下,我只能筛选出总数的不到一半的硬币。这显然没有对半分更优,于是我们考虑对半分。经过2次称量后,剩下 12 × 2 − 2 = 3 12\times2^{-2}=3 12×22=3 枚硬币。这时我们发现,由于你不知道次品的轻重情况,所以你不可能通过一次称量找出次品。

刚刚这种做法有什么弊端呢?把12个硬币分成4组,每组3个。第一次挑两组上称。如果平,那么我们这次的称量的意义仅仅在于,将样品容量减小一半;对于次品轻重情况,我们一概不知。考虑优化我们的分组方式,使得我们在减小规模的同时,知晓相对质量。换句话说,当我们称到平衡的时候,增加我们获取的信息。

为了优化平衡的情况,尝试分成3组,每组4个,即{1,2,3,4},{5,6,7,8},{9,10,11,12}。这样即使平衡,我们也获得了更多的信息。假设平衡,这样问题就变成从4个里面称2次。这个问题显然很好解决(第一次称12,第二次称13即可)。那我们就考虑不平衡的情况。不妨设1234 < 5678。

根据刚刚那套理论,我们再次尝试对半分。我们发现,我们又绕回到原来的坑点了——貌似无论怎么选,都有平衡的蛋疼情况。怎么办呢?
1234 &lt; 5678 1234 &lt; 5678 1234<5678 12 = 34 ? 12=34? 12=34?
容易理解,造成判断困难的原因是,有一些优品始终被称,干扰了判断。

考虑将次品换边,当天平两端硬币数相同时,天平的轻重情况总会改变。不妨将部分硬币换边。比如这样
125 &gt; 369 125&gt;369 125>369
9是从安全区借过来用的。经过这次称量,我们最后得到形如
X A &lt; B C XA&lt;BC XA<BCor X A &gt; B C XA&gt;BC XA>BC这种情况,其中X是正品。

这个时候,把BC称一下就完事了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值