作者puzzlez (你在偷看我吗XD)
看板puzzle
标题Re: [问题] 最少秤几次?
时间Fri Nov 23 07:25:53 2007
※ 引述《bb511 (我没空打牌)》之铭言:
: 这问题搞不好大家都知道 也看过了
: 不过我查一下 好像没po过??
: ---------------------------------------------
: 有十二袋装满金币的袋子
: 每袋中的金币一样多
: 其中一袋装满假金币
: 真金币每枚10公克,假金币每枚9公克。
: 最少要秤几次才能秤出假金币?
这题相信很多人知道答案了,不过为了向经典题目致敬,还是正式回答一下。
首先,这个题目重点在於,我们必须知道假币与真币间的重量差为多少。很多人会把它跟
「用天平找假币」的题目弄混,认为只要知道「较轻」、「较重」的资讯即可,事实上这
样是无解的(若要求一次秤出的话)。必须还要知道它「或轻、或重几克」才行。
此外,本题通常不考虑每袋金币是否有数量上的限制,也不考虑磅秤是否够大,能让我们
不管拿多少金币都秤得了(我相信日後一定会有脑筋急转弯的题目钻此漏洞)。
言归正传
原始的问题很简单,首先在十二袋金币上分别编上一到十二的编号,再分别从里头拿出相
同数量的金币。把这十二堆的金币一起拿去秤,然後看它比标准重量差多少即可判断假币
在哪一袋里。
如果假币在第一袋里,那秤出来的重量一定比标准重差1公克;若假币在第二袋里,由於
我们从里头拿出两枚,所以秤出的重量一定比标准重少2公克,其余依此类推。
这个问题的变形是,如果假币可能不只一袋,能否在只秤一次的情况找出呢?
答案是肯定的。
首先一样先编号,接着只要从每袋之中取出「2的(编号减一)次方」数量的金币,一起
拿去秤即可。实际的数量如下:
1、2、4、8、16、32、64、128、256、512、1024、2048
(2的0次方、2的1次方……2的10次方、2的11次方)
这些一共是4095(用〔2的N+1次方〕-1算较快)
也就是标准重是40950公克。
接着只要看秤出来的重量差几克,然後再算它是由哪些数字组成即可。表面上这边的计算
有点麻烦,但只要用「2进位」的观念下去算就行了。
例如秤出来的重量是39587克,那麽──
40950-39587=1363
把1363转成2进位得:
2|1363 ....余 1
────
2|681 ....余 1
────
2|340 ....余 0
────
2|170 ....余 0
────
2|85 ....余 1
───
2|42 ....余 0
───
2|21 ....余 1
───
2|10 ....余 0
───
2|5 ....余 1
───
2|2 ....余 0
───
1
所以1363(10进位)=010101010011(2进位。最前面补0,是为了凑齐12位数)
由於1在第1、第2、第5、第7、第9、第11位上,所以相应编号的金币是假的。
1363=1+2+16+64+256+1024
用第二种方法当然也可以用来解决起初的问题,但它的缺点就是必须要拿出许多金币来测
量(例如本题需取出4095枚)不像第一个方法那样「轻便」,可以说是各有利弊。
这些东西相信大家都知道,不过问题太经典,所以还是打来当做记录。
puzzlez
2007/11/22
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.194.17.138
※ 编辑: puzzlez 来自: 123.194.17.138 (11/23 07:28)
※ 编辑: puzzlez 来自: 123.194.17.138 (11/23 07:28)
※ 编辑: puzzlez 来自: 123.194.17.138 (11/23 07:30)