当前位置:首页 > 开发 > 移动开发 > 正文

二进制在数学中的妙用

发表于: 2012-11-14   作者:矮蛋蛋   来源:转载   浏览次数:
摘要: 原文地址: http://blog.csdn.net/hackbuteer1/article/details/6716603 十八世纪初,莱布尼茨发明了二进制数,当时的他肯定没有预料到二进制在信息时代会有着如此广泛的应用。二进制数以其工作可靠,运算简单,逻辑严密,容易实现等特点,成为了计算机的专用语言。在计算机科学和大量应用数学领域中,二进制记数法是必不可少的。在趣味数学方面,同样也有广泛的应
原文地址: http://blog.csdn.net/hackbuteer1/article/details/6716603
十八世纪初,莱布尼茨发明了二进制数,当时的他肯定没有预料到二进制在信息时代会有着如此广泛的应用。二进制数以其工作可靠,运算简单,逻辑严密,容易实现等特点,成为了计算机的专用语言。在计算机科学和大量应用数学领域中,二进制记数法是必不可少的。在趣味数学方面,同样也有广泛的应用。
让我们先来看一个经典的数学趣题:

一工人工作7天,老板有一段黄金,每天要给工人1/7的黄金作为工资,老板只能切这段黄金2刀,请问怎样切才能每天都给工人1/7的黄金?

这题不简单吧?小心别把脑子都想破了。



在给出答案之前,先让我们看另一个简单的例子:

用天平称1~63克整数克重的物品,至少要配备几只多重的砝码(砝码只能放在天平的一端)?

没有学过二进制的人是很难想到答案的,可是如果你知道二进制数,那就不难了。我们知道二进制中只有0和1两个数字,它的各位数字的权值从小到大依次为2^0,2^1,2^2,2^3,。。。。我们用一个数的每位数字乘以其权值所得到的乘积之和来表示这个数。对于一个具有8位的二进制数来说,它可以表示的数据范围是0~2^8。

63 = 2^6 – 1 = 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5

所以,我们只需配备2^0 =1,2^1 = 2,2^2 = 4,2^3 = 8,2^4 = 16,2^5 = 32六种不同克数的砝码各一个。

类似的题目还有如何装苹果:

现有一笔出售苹果的生意,已知客人可能需要的苹果数量肯定是1个到1000个之间,但不知道具体数字。客人要求必须全部用他提供的箱子装整箱(每个箱子都最多可以装1000个苹果),箱子一旦装成就无法再拆开重装。

你手中有1000个苹果,10个箱子,客人需要的苹果数量未知,问怎么装才能满足客人的需要?

解题的原理和上题是一样的,都是利用二进制数的记数原理。因为1000 < 2^10 = 1024,所以只要使用2^0,2^1,2^2,2^3,2^4,2^5,2^6,2^7,2^8,2^9十个数,就可以表示1到1023之间的所有数。

例如:30 = 2^1 + 2^2 + 2^3 + 2^4;75 = 2^0 + 2^1 + 2^3 + 2^6等。

但是现在苹果的总数不是1023个,而是1000个,所以第10个箱子装的苹果数不是512个,而是489个。

1000 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 489;

所以这10个箱子中每个箱子依次装1,2,4,8,16,32,64,128,256,489个苹果,就可以满足整箱提供给客人任意数量苹果的要求。

现在明白第一个题目的解法了吧?对!就是二进制。

因为7 < 2^3 = 8,所以只要使用2^0,2^1,2^2三个数,就可以表示1到7之间的所有数。那么我们只要把金条分成三份,比例为1:2:4,也就是第一刀切下金条的七分之一(设为A),第二刀切下金条的七分之二(设为B),剩下的部分刚好为金条的七分之四(设为C)。我们只要按照如下的方法发放工资,就解决问题了:

第一天-->给长工A; (1 = 2^0)

第二天-->给长工B,并把A拿回来;(2 = 2^1)

第三天-->给长工A;(3 = 2^0 + 2^1)

第四天-->给长工C,并把A、B拿回来;(4 = 2^2)

第五天-->给长工A;(5 = 2^0 + 2^2)

第六天-->给长工B,并把A拿回来;(6 = 2^1 + 2^2)

第七天 给长工A。(5 = 2^0 + 2^1 + 2^2)

上面三个问题已经很能说明二进制在趣味数学中的应用了,我们使用这种方法可以解决一系列的此类问题。下面是一个有趣的药瓶问题:

    一家药店收到运来的某种药品十瓶。每瓶装药丸1000粒。药剂师怀特先生刚把药瓶送上架子,一封电报接踵而来。怀特先生把电报念给药店经理布莱克小姐听。

怀特先生:“特急!所有药瓶须检查后方能出售。由于失误,其中有一瓶药丸每粒超重10毫克。请即退回分量有误的那瓶药。怀特先生很气恼。

怀特先生:“倒霉极了,我只好从每瓶中取出一粒来称一下。真是胡闹。

怀特先生刚要动手,布莱克小姐拦住了他。布莱克小姐:“等一下,没必要称十次,只需称一次就够了。”

这怎么可能呢?

布莱克小姐的妙主意是从第一瓶中取出1粒,从第二瓶中取出2粒,第三瓶中取出3粒,以此类推,直至从第十瓶中取出10粒。把这55粒药丸放在秤上,记下总重量。如果重5510毫克,也就是超过规格10毫克,她当即明白其中只有一粒是超重的,并且是从第一瓶中取出的。

如果总重量超过规格20毫克,则其中有2粒超重,并且是从第二瓶中取出的,以此类推进行判断。所以布莱克小姐只要称一次,不是吗?



六个月后,药店又收到此种药品十瓶。一封加急电报又接踵而至,指出发生了一个更糟糕的错误。

这一次,药丸每粒超重仍然是10毫克,但是对超重药丸的瓶数无可奉告,也就是说可能有好几个药瓶超重。怀特先生气恼极了。怀特先生:“布莱克小姐,怎么办?我们上次的方法不中用了。布莱克小姐没有立即回答,她在思索这个问题。

布莱克小姐:“不错。但如果把那个方法改变一下,我们仍然只需称一次就能把分量有误的药品识别出来。这回布莱克小姐又有什么好主意?

请大家仔细思考,然后运用二进制原理来解决吧。

在第一个秤药丸问题中,我们知道只有一瓶药丸超重。从每瓶中取出不同数目的药丸(最简单的方式就是采用计数序列),我们就可使一组数字和一组药瓶成为一一对应的关系。

为了解决第二个问题,我们必须用一个数字序列把每瓶药单独标上某个数字,且此序列中的每一个子集必须有一个单独的和。有没有这样的序列?有的,最简单的就是下列二重序列:1,2,4,8,16,。。。这些数字是2的连续次幂,这一序列为二进制记数法奠定了基础。

在这个问题中,解法是把药瓶排成一行,从第一瓶中取出1粒,从第二瓶中取出2粒,从第三瓶中取出4粒,以此类推。取出的药丸放在秤上称一下。假设总重量超重270毫克,由于每粒分量有误的药丸超重10毫克,所以我们把270除以10,得到27,即为超重药丸的粒数。把27化成二进制数:11011。在11011中自右至左,第一,二,四,五位上的“1”表示其权值分别为1,2,8,16。因此分量有误的药瓶是第一,二,四,五瓶。

这里有一个简单的扑克魔术,可叫你的朋友莫名其妙。这个戏法也许看上去与砝码问题毫无关系,但他们的依据是相同的,都是二进制原理。

请别人把一副牌洗过,然后放进你的口袋,再请人说出一个1至15以内的数字。然后你把手插进你的口袋里,一伸手就取出一组牌,其数值相加正好等于他所说的数字。

此秘密简单的很。在耍魔术之前,预先取出A,2,4,8各一张放入口袋。这副牌缺少区区四张,不大可能为人察觉。洗过的牌放入口袋后,暗中将其排置于原先已经放在口袋中的四张牌的后面。请别人说出一个数字,你用心算将此数表示成2的幂的和。如果是10,那你就应想到:8+2=10,随即伸手入袋,取出2和8的牌示众。

心灵感应游戏的依据也是二进制原理,准备五张卡片,分别记为A,B,C,D,E,上面写着1~31之间的一些整数。请一位观众想好此范围内的一个数字(例如某个人的年龄),然后请他把所有上面有此数字的卡片都交给你。你随即说出他心中所想的那个数字。

卡片如下:

A:1   3   5   7

   9   11  13  15

   17  19  21  23

   25  27  29  31

B:2   3   6   7

   10  11  14  15

   18  19  22  23

   26  27  30  31

C:4   5   6   7

   12  13  14  15

   20  21  22  23

   28  29  30  31

D:8   9  10   11

   12  13  14  15

   24  25  26  27

   28  29  30  31

E:16  17  18  19

   20  21  22  23

   24  25  26  27

   28  29  30  31

秘诀就是把每张卡片上2的幂的第一个数字相加。例如,如果把卡片C和E交给你,你只要将上面第一个数字4和16相加,便知道别人心中所想的数字是20。

这是为什么呢?

我们观察卡片上的数字,可以发现这样一个规律:第一张卡片(A)上的数字如果用五位二进制表示,则分别为00001,00011,00101,00111,01001,01011,01101,01111,10001,10011,10101,10111,11001,11011,11101,11111。

第二张卡片(B)上的数字如果用五位二进制表示,则分别为00010,00011,00110,00111,01010,01011,01110,01111,10010,10011,10110,10111,11010,11011,11110,11111。

第三张卡片(C)上的数字如果用五位二进制表示,则分别为00100,00101,00110,00111,01100,01101,01110,01111,10100,10101,10110,10111,11100,11101,11110,11111。

请大家注意观察,第一张卡片上每个二进制数的右起第一位都是“1”,第二张卡片上每个二进制数的右起第二位都是“1”,第三张卡片上每个二进制数的右起第三位都是“1”。依此类推,我们可以发现第n张卡片上每个二进制数的右起第n位都是“1”。

观众所想的数字和卡片的关系只有“有”和“无”两种状态,正好与二进制数码0与1一一对应。“有”我们就记为“1”,“无”我们就记为“0”,这样观众交给我们的卡片组合,就对应一个二进制数,如把卡片C和E交给你,那卡片组合就是“有无有无无”,对应二进制数为“10100”,即十进制数“20”。又如把卡片A,B和E交给你,那卡片组合就是“有无无有有”,对应二进制数为“10011”,即十进制数“19”。

二进制数的位数越多,能够表示的数值就越大,如果有6张卡片,则表示的数字范围扩大到1~63,7张卡片则可以表示1~127。

有时,魔术师为了使得这个戏法显得更加玄妙,故意把每张卡片涂上各种不同的颜色。他只需记住每种颜色所代表的2的幂。例如,红卡片代表1,橙卡片代表2,黄卡片代表4,绿卡片代表8,蓝卡片代表16,紫卡片代表32(可依据彩虹的诸色顺序)于是,魔术师站在大房间的一头,请人想好一个数字,并且把上面有此数字的卡片置于身旁,他即可根据那人身旁的卡片的颜色随口说出别人心中所想的数字。

根据这个原理,人们还设计来好玩的猜姓氏和年龄的游戏:

表演者拿出七张卡片,每张卡片上都写满了数字和姓氏,卡片如下:

表一:

赵1 孙3 周5 郑7 冯9 褚11 蒋13 韩15

朱17 尤19 何21 施23 孔25 严27 金29 陶31

戚33 邹35 柏37 窦39 云41 潘43 奚45 彭47

鲁49 昌51 苗53 花55 俞57 袁59 邦61 史63

费65 岑67 雷69 倪71 滕73 罗75 郝77 安79

乐81 时83 皮85 齐87 伍89 元91 顾93 平95

和97 肖99

表二

钱2 孙3 吴6 郑7 陈10 褚11 沈14 韩15

秦18 尤19 吕22 施23 曹26 严27 魏30 陶31

谢34 邹35 水38 窦39 苏42 潘43 范46 彭47

韦50 昌51 凤54 花55 任58 袁59 鲍62 史63

廉66 岑67 贺70 倪71 殷74 罗75 邬78 安79

于82 时83 卞86 齐87 余90 元91 孟94 平95

穆98 肖99

表三:

李4 周5 吴6 郑7 卫12 蒋13 沈14 韩15

许20 何21 吕22 施23 华28 金29 魏30 陶31

喻36 柏37 水38 窦39 葛44 奚45 范46 彭47

马52 苗53 凤54 花55 柳60 邦61 鲍62 史63

薜68 雷69 贺70 倪71 毕76 郝77 邬78 安79

傅84 皮85 卞86 齐87 卜92 顾93 孟94 平95

尹100

表四

王8 冯9 陈10 褚11 卫12 蒋13 沈14 韩15

张24 孔25 曹26 严27 华28 金29 魏30 陶31

章40 云41 苏42 潘43 葛44 奚45 范46 彭47

方56 俞57 任58 袁59 柳60 邦61 鲍62 史63

汤72 滕73 殷74 罗75 毕76 郝77 邬78 安79

廉88 伍89 余90 元91 卜92 顾93 孟94 平95

表五

杨16 朱17 秦18 尤19 许20 何21 吕22 施23

张24 孔25 曹26 严27 华28 金29 魏30 陶31

郎48 鲁49 韦50 昌51 马52 苗53 凤54 花55

方56 俞57 任58 袁59 柳60 邦61 鲍62 史63

常80 乐81 于82 时83 傅84 皮85 卞86 齐87

廉88 伍89 余90 元91 卜92 顾93 孟94 平95

表六:

吴32 成33 谢34 邹35 喻36 柏37 水38 窦39

章40 云41 苏42 潘43 葛44 奚45 范46 彭47

郎48 鲁49 韦50 昌51 马52 苗53 凤54 花55

方56 俞57 任58 袁59 柳60 邦61 鲍62 史63

黄96 和97 穆98 肖99 尹100

表七:

唐64 费65 廉66 岑67 薜68 雷69 贺70 倪71

汤72 滕73 殷74 罗75 毕76 郝77 邬78 安79

常80 乐81 于82 时83 傅84 皮85 卞86 齐87

廉88 伍89 余90 元91 卜92 顾93 孟94 平95

黄96 和97 穆98 肖99 尹100

表演者说:“任何人只要你的年龄和姓氏在这几张上,我都可以立即猜中。”

他的话音刚落,有人说:“我的年龄在第一张表上。”

“别的表上都没有么?”表演者问。

那人又详细地端详一下,补充说:“第三张、第五张表上也有。”

“凡是表上有的,不能遗漏!”表演者说,“如果你的年龄只在第一、三、五三张表上,那么你的年龄应该是21岁。”

果然猜中了!

又有人说;“我的姓在二、三、四、五、七表上有。”

“这就是说,你是孟老夫子的后代了!”

人们接二连三地问,表演者一个个回答,竟然没有一次失误,大家惊奇得目瞪口呆。可是,谁都不了解这奇特的表格里隐藏着的秘密,除了聪明的你。

赶快给大家揭开其中的奥秘吧!

二进制在数学中的妙用

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
原文链接:http://developer.51cto.com/art/201009/224908.htm 你对clear属性在CSS中的使用是否了解
select args3,args4 from beyond ; select args3,group_concat(args4) as args4 from beyond group
@我们应用程序使用MVC架构的话,对于处理数据类,我们会单独的定义Model类,在里面为要展示的属性进行
OSGi的实现本身有一个控制台,提供插件的查看和管理功能。而Eclipse是基于OSGi的平台应用,这样我们
OSGi的实现本身有一个控制台,提供插件的查看和管理功能。而Eclipse是基于OSGi的平台应用,这样我们
OSGi的实现本身有一个控制台,提供插件的查看和管理功能。而Eclipse是基于OSGi的平台应用,这样我们
看到百威啤酒的客户端主界面的按钮,感觉比较新奇,先看下图片: [img] http://images.cnblogs.com/c
Unobtrusive Javascript有三层含义:一是在HTML代码中不会随意的插入Javsscript代码,只在标签中加
看到百威啤酒的客户端主界面的按钮,感觉比较新奇,先看下图片: 注意图中我画的箭头,当时鼠标点击
OSGi的实现本身有一个控制台,提供插件的查看和管理功能。而Eclipse是基于OSGi的平台应用,这样我们
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号