`
piperzero
  • 浏览: 3541689 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

有趣的二进制算法小魔术

阅读更多

你对星座有兴趣吗?传说星座与人的性格、命运、爱情、事业、友情、家庭都有紧密联系,不过魔术师说,那些都是浮云。“我今天为你表演一个靠谱的,我要用心 灵来感知你的星座。如果你对星座一无所知,就先看一下下面这张表吧,一年一共有十二个星座,你属于哪一个星座取决于你的出生日期。”

这个魔术其实很简单,魔术师会先后展示给观众 A、B、C、D 四张图片,每一次观众只需要仔细看一看,自己的星座有没有位列其中。

举个例子,如果你是史上最不幸的、每四年才可以过一次生日的那个人,出生日期是 2 月 29 日,那你的星座一定是双鱼座。这样,你的星座只有在图片 C 和 D 中才可以看到,在图片 A、B 中都看不到。把这个结果告诉魔术师,魔术师经过一番心灵感应后,就可以确定你是双鱼座。

魔术揭秘

对于不明真相的围观者来说,这个魔术会显得很神奇。不过,一部分理工男却能一眼看穿魔术的蹊跷之处。魔术师具体的做法是,首先在心里安装一个“计数 器”,一开始数字为 0。如果你的星座出现在了卡片 A 中,魔术师就会在计数器上加 1,否则计数器数字不变;如果图片 B 中有你的星座,他就会再加上 2 ;图片 C 中有你的星座,计数器就加上 4;图片 D 中有你的星座,计数器就会加 8。计数器最后得到的数字就是答案了。比如按照刚刚那位“生日帝”告诉魔术师的结果,计数器的数字就是 4 + 8 = 12。然后,让文章开头那张图中隐藏的数字显示出来:

数字对应的结果就是心灵感应到的星座了。

二进制计数法

正常情况下,数字 12 可以写成 1×10 + 2×1,其中 1 是十位数字,2 是个位数字。如果这个数字更大,还会有百位、千位等等。这些数位的单位从小到大分别是 1、10、100、1000⋯⋯

可是我们还可以用另一种方式来表示一个数,就是魔术师所用的方式——二进制。在二进制中,12 = 1×8 + 1×4 + 0×2 + 0×1,在这里,数位的单位由 1、10、100、1000 变成了 1、2、4、8,同时每个数位上的数字也由 0 到 9 十种变为了 0 和 1 两种,12 也就可以用 1100 来表示了。卡片 A、B、C、D 分别是从小到大的 4 个数位,由于 12 号星座——双鱼座——的二进制表达是 1100,因此双鱼座就只在卡片 C 和 D 上出现。在四张卡片上指认星座的时候,你也就把星座对应的数字的二进制表达偷偷泄露给了魔术师,如果你告诉魔术师有,就相当于告诉他了那一位数字是 1,反之,那一位数字就是 0。

二进制的用途非常广泛。计算机正是像这位魔术师一样,用二进制来表示各种数字。

转自【http://www.guokr.com/article/5196/】

分享到:
评论

相关推荐

    小甲鱼_数据结构与算法(98集全)

    二37_ KMP算法. mp4 四71斐波那契查找(黄金分割法查找).38_ KMP算法2. mp4 立39_ KMP算法之NEXT数组代码原理分析. mp4二40_ KMP算法之实现及优化. mp4二41树. mp4 四42_树的存储结构. mp443_树的存储结构2. mp4...

    基于 flatbuffers 的地理数据的高性能二进制编码

    平面地理缓冲区一种基于flatbuffers 的地理数据的高性能二进制编码,可以保存简单特征的集合,包括 SQL-MM 第 3 部分定义的圆形插值。受到geobuf和flatbush 的启发。为了简单起见,故意不支持随机写入,并且能够在...

    md5加密算法详解md5加密算法详解md5加密算法详解md5加密算法详解

    - 每步操作会更新`state`数组中的四个32位值(A, B, C, D),这些值随着处理数据而不断变化,最终得到的`state`就是MD5摘要的二进制形式。 5. **安全性**: - 尽管MD5曾经被认为是非常安全的,但随着时间的推移,...

    Data_Structures-Algorithms

    具有内部类的二进制搜索树 堆 最小堆 最大堆 图表 种类 加权的 未加权 定向的 加权定向 未加权定向 无向 加权无向 未加权未定向 DFS和BFS Dijkstra的算法 A *算法 拓扑排序 最小生成树 克鲁斯卡尔 原始 其他 魔术...

    数学文化赏析答案整理终极版1

    8. 二进制猜数游戏:在二进制游戏中,如果一个数只出现在表1、3、5中,那么这个数是21,因为它在二进制下表示为10101。 9. 第一次数学危机:公元前5世纪,古希腊数学家发现无法表示根号2(即√2)为两个整数的比例...

    md5算法的实现,很规范的,很容易看懂

    它将任意长度的输入(也叫做预映射,pre-image)转换为固定长度的输出,通常是128位的二进制数,通常用32个十六进制数字表示。MD5的主要应用是对数据的完整性进行校验,常用于文件校验、密码存储等领域。 MD5的工作...

    base64-phf:为https生成魔术常数

    3. 每个6位二进制数对应Base64字符集中的一个字符,这个字符集由64个可打印的ASCII字符组成,包括大小写字母、数字和两个特殊符号`+`和`/`。 4. 最后,如果原始二进制数据不是3的倍数,会在末尾添加零位,并用`=号`...

    解决数组的编程问题(共25张PPT).pptx

    游戏中的五张卡片实际上代表了5位二进制数的每一位,每张卡片上的数字对应二进制数中对应的位为1的位置。通过数组,我们可以方便地存储和处理这些数字,实现根据二进制表示产生卡片数字、检查用户猜测等功能。 对于...

    易语言源码易语言GZIP解压缩源码.rar

    在易语言环境中,开发者可以通过源码学习如何使用易语言的内建函数或自定义函数处理二进制数据,如何进行文件读写,以及如何构建和使用数据结构。此外,理解并实现这样的解压缩过程也能为其他压缩格式如ZIP、RAR的...

    西电ACM校队2013选拔笔试样题

    2. **最优化问题**:利用最少的砝码称出1~40的所有重量,这是一道典型的砝码问题,可以通过二进制编码和动态规划来解决,最少砝码数和它们的重量通常是斐波那契数列的一部分。 3. **博弈论**:这是关于数字游戏的...

    Python-Programs:我的Python程序集

    二进制搜索树 深度优先遍历 广度优先遍历 计算叶节点 从预购和有序构建树 打印到叶节点的所有路径 图表 图形 广度优先搜索 深度优先搜索 在有向图中检测周期 在无向图中检测周期 拓扑排序 普里姆算法 剧本 创建多...

    C语言编程常用英语词汇ppt课件.ppt

    机器语言(Machine Language):是计算机直接执行的二进制代码,人类无法直接阅读。 运算与逻辑单元(ALU):是计算机的核心组件,负责执行算术和逻辑操作。 内存单元(Memory Unit):是计算机存储数据和程序的...

    C程序范例宝典(基础代码详解)

    实例002 十进制转换为二进制 3 实例003 n进制转换为十进制 4 实例004 以IP地址形式输出 5 1.2 条件判断 6 实例005 3个数由小到大排序 6 实例006 a2+b2 8 实例007 整倍数 9 实例008 判断闰年 10 实例...

    文本型文件内容搜索

    这些文件的共同特点是它们的数据格式易于解析和搜索,因为它们不包含复杂的二进制结构。 进行文本型文件内容搜索时,第一步是定义搜索范围。用户可以根据需求指定特定的文件后缀,比如只搜索`.txt`文件,或者同时...

    unity笔试题.docx

    2017的二进制表示为11111011001,其中包含5个1。 **答案:** 7 --- #### 六、C++基础 **题目6:** 请写出下列代码的输出内容。 **知识点:** - C++基本语法。 - 变量的自增和自减操作。 **解析:** - `b=a++;`...

    多媒体技术考试试卷(样卷)

    具体操作涉及到将二进制序列转换回模拟信号,通常需要逆采样过程。 **三、PowerPoint 中的 OLE 对象添加** PowerPoint 2000 支持 OLE 技术,可以链接或嵌入对象。链接对象是指向原始文件的指针,更新源文件时,PPT...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例223 以二进制形式上传文件到数据库 285 实例224 上传文件到服务器 287 实例225 限制上传文件的大小 288 实例226 限制上传文件的类型 291 实例227 上传多个文件到服务器 292 4.2 文件下载 294 实例228 通过链接...

Global site tag (gtag.js) - Google Analytics