一家药店收到运来的某种药品十瓶.每瓶装药丸1000粒.药剂师怀特先生刚把药瓶送上架子,一封电报接踵而来.怀特先生把电报念给药店经理布莱克小姐听.
怀特先生:"特急!所有药瓶须检查后方能出售.由于失误,其中有一瓶药丸每粒超重10毫克.请即退回分量有误的那瓶药.怀特先生很气恼.
怀特先生:"倒霉极了,我只好从每瓶中取出一粒来秤一下.真是胡闹.
怀特先生刚要动手,布莱克小姐拦住了他.布莱克小姐:"等一下,没必要秤十次,只需秤一次就够了.这怎么可能呢?
布莱克小姐的妙主意是从第一瓶中取出1粒,从第二瓶中取出2粒,第三瓶中取出3粒,以此类推,直至从第十瓶中取出10粒.把这55粒药丸放在秤上,记下总重量.如果重5510毫克,也就是超过规格10毫克,她当即明白其中只有一粒是超重的,并且是从第一瓶中取出的.
如果总重量超过规格20毫克,则其中有2粒超重,并且是从第二瓶中取出的,以此类推进行判断.所以布莱克小姐只要秤一次,不是吗?
六个月后,药店又收到此种药品十瓶.一封加急电报又接踵而至,指出发生了一个更糟糕的错误.
这一次,对超重药丸的瓶数无可奉告.怀特先生气恼极了.怀特先生:"布莱克小姐,怎么办?我们上次的方法不中用了.布莱克小姐没有立即回答,她在思索这个问题.
布莱克小姐:"不错.但如果把那个方法改变一下,我们仍然只需秤一次就能把分量有误的药品识别出来.这回布莱克小姐又有什么好主意?
在第一个秤药丸问题中,我们知道只有一瓶药丸超重.从每瓶中取出不同数目的药丸(最简单的方式就是采用计数序列),我们就可使一组数字和一组药瓶成为一一对应的关系.
为了解决第二个问题,我们必须用一个数字序列把每瓶药单独标上某个数字,且此序列中的每一个子集必须有一个单独的和.有没有这样的序列?有的,最简单的就是下列二重序列:1,2,4,8,16,...这些数字是2的连续次幂,这一序列为二进制记数法奠定了基础.
在这个问题中,解法是把药瓶排成一行,从第一瓶中取出1粒,从第二瓶中取出2粒,从第三瓶中取出4粒,以此类推.取出的药丸放在秤上秤一下.假设总重量超重270毫克,由于每粒分量有误的药丸超重10毫克,所以我们把270除以10,得到27,即为超重药丸的粒数.把27化成二进制数:11011.在11011中自右至左,第一,二,四,五位上的"1"表示其权值分别为1,2,8,16.因此分量有误的药瓶是第一,二,四,五瓶.
在由2的幂组成的集合中,每个正整数是单一的不同组合中的元素之和.鉴于这一事实,二进制记数法极为有用.在计算机科学和大量应用数学领域中,二进制记数法是必不可少的.在趣味数学方面,同样也有难以计数的应用.
这里有一个简单的扑克魔术,可叫你的朋友莫名其妙.这个戏法也许看上去与药瓶问题毫无关系,但他们的依据是相同的,都是二进制原理.
请别人把一副牌洗过,然后放进你的口袋,再请人说出一个1至15以内的数字.然后你把手插进你的口袋里,一伸手就取出一组牌,其数值相加正好等于他所说的数字.
此秘密简单的很.在耍魔术之前,预先取出A,2,4,8各一张放入口袋.这副牌缺少区区四张,不大可能为人察觉.洗过的牌放入口袋后,暗中将其排置于原先已经放在口袋中的四张牌的后面.请别人说出一个数字,你用心算将此数表示成2的幂的和.如果是10,那你就应想到:8+2=10,随即伸手入袋,取出2和8的牌示众.
卜算卡片的依据也是二进制原理,准备六张卡片,分别记为A,B,C,D,E,F.然后将一些数字填写在卡片上,确定每张卡片上的数字集合的规则是这样的:在一个数的二进制表示中,若右起第一位是"1",则此数字就在卡片A上.该卡片上的数字集合自1起始,全部数字就是1至63范围内所有的奇数;卡片B则包括1至63范围内的二进制记数法中右起第二位为"1"的全部数字;卡片C包括1至63范围内的二进制记数法中右起第三位为"1"的全部数字;卡片D,E,F以此类推.注意:63这个数字的二进制记数法是"111111",每一位都是"1",因此每张卡片上都有这个数字.
这六张卡片可以用来确定1至63范围内的任意一个数字.请一位观众想好此范围内的一个数字(例如某个人的年龄),然后请他把所有上面有此数字的卡片都交给你.你随即说出他心中所想的那个数字.秘诀就是把每张卡片上2的幂的第一个数字相加.例如,如果把卡片C和F交给你,你只要将上面第一个数字4和32相加,便知道别人心中所想的数字是36.