有趣的天平秤假币问题

问题描述:

有12枚硬币,其中有一枚是假币,但是不知道是重还是轻。现给定一架没有砝码的天枰,问至少需要多少次称量才能找到这枚硬币?如何证明给出的方案是最少次数?

思路分析:

我们首先想到的可能是将12枚硬币分成两堆,每堆6枚放到天枰上称量,这样的得到的结果一定是天枰是倾斜的。得不到任何其他信息,反而白白浪费了一次称量机会。因此第一次称量一定是选择一部分去称量,利用均分原理,天枰左边放一部分硬币,右边放一部分硬币,还剩下一部分硬币。从平均情况考虑,三部分中含有假币的概率是相等的。因此,第一次称量中,我们可以将12枚硬币分成3份,每份4枚硬币,记为甲、乙、丙

取甲、乙放到天枰上称量,一共会出现3种情况:

  • 平衡:说明甲乙中都不会含有假币,则假币一定在丙中,记丙中的4枚硬币为A、B、C、D。(依然不能将4枚硬币分成2份!无意义!!)取A、B放到天枰上称量,则又会出现三种不同情况:

    • AB平衡:AB不可能为假币,一定在C、D中。

      • 取C与A量,若平衡,说明D是假币;若不平衡,说明C是假币。
    • A重/B重:A为假或B为假。取甲中任意一枚(真币)与A称量。若平说明B为假币,且假币轻;若依然A重,说明A为假币且假币重;
  • 左倾:说明假币在甲或乙中。分别记甲中四枚硬币为ABCD,乙中四枚硬币为EFGH,丙中四枚硬币为IJKL(都是真币)。取ABE和CDI称量,则会出现
    • 若ABE与CDI平衡,则说明他们都是真币。FGH为假币且假币轻。取FG称量:

      • 若平衡,说明H为假币;
      • 否则FG中谁轻谁是假币。
    • 若左倾(即ABE重,CDI轻)。第一次称时,ABCD>EFGH。所以假币在AB中,且假币重;
      • A与I在称量一次,若平则B是假币,若A重,则A是假币。
    • 若右倾(即ABE轻,CDI重)。第一次称时,ABCD>EFGH。所以假币在CD中,且假币重;
      • C与I再称量一次,若平则D是假币,若C重,则C是假币。
  • 右倾:(与左倾情况完全对称)

通过上面的分析可知,无论什么情况,3次称量就可以得出哪个是假币。

理论分析:

  • 一次天枰称量能够得到左倾、右倾、平衡3种情况,如果把一次称量当做是一次编码,则它是3进制编码才能够表示;
  • 我们想要用3进制编码表示的是:12枚硬币,且假币的轻重未知。
    • 每枚硬币都可能是假币,共12种情况,假币有可能比真币轻,也有可能重,共12*2=24种情况;
    • 3n>=24 则n至少为3才可以。
  • 所以从信息论的角度讲,3次称量是最小值。
时间: 2024-10-13 07:52:20

有趣的天平秤假币问题的相关文章

一个有趣的天平秤球问题

最近在网上看到一个题目,题设简单明了,本以为解决起来相当简单,细想之下却是有一定难度.这个题的题意如下:12个外观一致的球,其中只有一个重量不同,要求使用天平称重3次即找出这个不同重量的球并判断其较重还是较轻. 继续阅读下文之前建议大家先尝试思考一下解决方案. 读者朋友可能在尝试了几种方案之后仍然无法解决,当然有条件的话大家可以通过实物去试验每一次称重,比较直观.下面我提供一个计算机的小程序(C语言编写)来模拟题目中的天平称重,其实也可以当成是一个趣味小游戏来玩玩.?   #include <s

1057: 有假币

  1057: 有假币 时间限制(普通/Java):1000MS/10000MS   运行内存限制:65536KByte 总提交: 2844       测试通过:773 描述 居然有假币!!!  事情是这样的,现在猪肉涨了,但是农民的工资却不见涨啊,没钱怎么买猪肉啊.渊子这就去买猪肉,结果找来的零钱中有假币!!!可惜渊子一不小心把它混进了一堆真币里面去了.现在知道假币的重量比真币的质量要轻.给你一个天平,请用最快的时间把那个可恶的假币找出来. 输入 1≤n≤230,输入0结束程序. 输出 最少

几个linux终端的有趣玩法

1.sl 还可以给别人搞恶作剧: alias ls=sl 这样别人使用 ls 列出目录和文件的时候,却出现一个小火车,那滋味一定很酸爽哈哈哈哈! 2. fortune 这个命令会随机输出有趣的话,比如名言或笑话.同样需要先安装. apt-get install fortune (for aptitude based system) yum install fortune (for yum based system) [email protected]:~$ fortune There is no

看到个有趣的方法批量下载rtf模板

一般想要批量下载rtf模板我们都是用fndload来实现或者 perl download.pl来实现,今天看到一个比较有趣的方法 Hi, Blob column 'template file data' below is just what you want, open it in PLSQL-DEVELOPER and save it as a rtf file or you can write programs that work with 'BLOB' objects to export

编程语言中那些有趣的命名

学习NodeJS的时候,一定会用到其包管理器npm.npm的字面意思是node package manager,实际的含义也是这样,但是npm真正的英文名却是"npm is not an acronym",意思是"npm不是一个缩写",所以如果要问npm是什么单词的缩写,那么回答就是"'npm是不是一个缩写'的缩写". 这种计算机科学中的"饶舌"现象叫作递归缩写. 递归缩写(Recursive acronym)即递归首字缩写,

有趣的网页小部件笔记

在网页上加入一些简单的小部件就可以让网页变得很有趣,这里记录一下用过的比较有趣的小部件. 1. 访问次数统计 借助于amazingcounters可以统计网站的被访问次数,提供了很多的样式可以选择: 只需要将生成的html代码片段插入到要统计的网页中即可: <p style="align: center"> <a href="http://www.amazingcounters.com"> <img border="0&quo

(有趣)chrome不同浏览器版本对display:flex和溢出隐藏显示省略符号的bug

项目中碰到一个十分有趣的情形: 布局要求是这样:右边创建新订单是固定宽度80px,左侧是自适应宽度,溢出隐藏.如下图. 这里布局不用说肯定使用display:flex的.左侧flex:1;右侧width:80px:. 本来在我的机器上是各种ok的,可是交给后端的兄弟们后发现在他的机器上左侧并没有flex:1; 总是以一个固定的宽度杵在那里,破坏掉布局,后来一查看,原来是后端的chrome是最新版本, 而我的这台机器是旧版本,两个版本的chrome对display:flex的解析竟然不一样. 解决

10个有趣的Linux命令

  Linux当中有很多比较有趣的命令,可以动手看看,很简单的. 1.rev命令 一行接一行地颠倒所输入的字符串. 运行: $rev 如输入:shiyanlou shiyanlou rev.jpg 2.asciiview命令 1)先安装aview $sudo apt-get install aview 2)再安装imagemagick $sudo apt-get install imagemagick 3)使用asciiview $asciiview shiyanlou.png -driver 

关于java除法的一个有趣例子。

今天逛贴吧的时候偶然发现吧友的一个有趣例子. public class Demo{     public static void main(String[]args){         System.out.println(24/0);  //会抛byzero异常         System.out.println(24.0/0.0) //可以输出,输出为Infinity:     } } 目前对于第二句为什么不会报byzero异常也不知道.先做个标记.理解了再补充上.