数学魔术系列之心灵感应

你 相信心灵感应存在吗?在一次表演上,魔术师杰克父子两人为大家表演了扑克牌的心灵感应。首先老杰克先上场,拿出一副扑克牌,在现场任意找了一位观众,让他 抽出五张牌,老杰克用眼睛迅速扫了一下五张牌,分别是红桃4,梅花6,方片A, 黑桃5和方片9,然后选出方片9交给观众,让观众将牌翻过去,自己将剩下的四张牌正面朝上一一摆放到桌面上,而刚刚发生的这一切,站在远处的小杰克完全无 法看清楚。之后,老杰克对这位观众说,“刚才我给你的这张牌是什么,只有你和我知道,但是我和我的弟弟小杰克在心理上有一种神秘的感应力量,他也可以猜得 到这张牌是什么,下面就请小杰克走过来”。小杰克走到放着扑克牌的桌子前,双手合拢放到胸前,沉思几秒钟,迅速说出了老杰克给观众的牌是方片9。

放在桌面上的四张牌:

拿走的方片9:

这个魔术从八十年代开始在美国流行,很多观众看完魔术后第一反应是老杰克和小杰克之间一定发生了某种信息交流,比如手势、身体语言,可是用一两个动 作同时表示出一张牌的花色和大小并不是易事。其实这个魔术是一个纯粹的数学游戏,最初由美国麻省理工学院一位数学博士发明。为了增加魔术的趣味性,一些魔 术师在表演这个魔术时,两个表演搭档身处两个城市甚至身处两个国家,通过电话、电子邮件通知自己的猜测,不过无论表演的方式如何改变,有一点是不变的,小 杰克必须知道或看到五张牌中剩下的四张牌。

既然魔术的玄机在在这四张牌上,那么老杰克是如何通过这四张牌告诉小杰克第五张牌的花色和大小的呢?有人会想到排列组合,四张不同的扑克牌一共有 4*3*2*1=24种排列方式,是不是因为这个?可是一副扑克牌(除去大小王52张),拿掉4张后,还剩40多张,24种排列方式也表示不了40多种可 能性,而且每次抽出的五张牌中,还可能出现同样的数字,同样的花色,兄弟两人事先也不知道观众到底会抽出哪五张牌,接着想下去,真让人头疼。

实际上,这个魔术不是一个简单的排列组合,要经过几个步骤,第一步靠的是老杰克。大家都知道,扑克牌只有四种花色,如果抽出五张牌,其中至少有两张 牌是一种花色的,(相当于把5个苹果放到四个箱子里,至少会有一个箱子里有两个或以上的苹果),上面的五张牌中方片A和方片9就属于一个花色,老杰克给观 众的牌不是任意给的,一定是两个相同花色牌中的一个,之后他把剩下的四张牌放到桌子上时,要保证第一张牌(方片A)和观众手中的牌(方片9)是一个花色, 这样小杰克看到方片A之后,就可以推断出那张牌的花色也是方片。有人会说,如果总是把和要猜的牌一样花色的牌放在第一个位置,会不会被人察觉到,其实兄弟 两可以事先约定好放在第几个位置,未必一定是第一个。

知道了花色以后,老杰克又是怎样用红桃4,黑桃5和梅花6告诉小杰克那张牌的数字是9的呢?剩下的这三张牌可能都是6,也可能都是梅花,但是有一点 是确定的,来源于同一副扑克的这三张牌是互不相同的,魔术发明者的智慧正在于此。老杰克和小杰克首先要制定一个比较任意两张牌谁大谁小的“规则”,例如在 扑克52张牌中红桃的牌最大,黑桃的牌其次,然后是梅花、方片,同样花色的牌,K最大,A最小。这样,任意三张牌中,都会有一个“大牌”,一个“中等牌” 和一个“小牌”。在摆放这三张牌时,有大中小、大小中、小大中、小中大、中大小,中小大六种摆放顺序,上面图中显然属于“大中小”方式。

这六种排列方式可以分别代表1、2、3、4、5、6六个数字,可是扑克牌一共有从A到K十三个数字,六个数字无论如何也表示不了十三个数字呀!很多 聪明的观众在自己思考这个魔术的原理时,或许也可以猜得出之前的所有秘密,但是最后一步却把他们难住了,这也正是这个魔术的画龙点睛之笔。

在魔术的第一步,一个和被藏起来的牌花色一样的牌被用来指示花色,但是它的角色其实还没有说完。老杰克拿出了方片9给观众,但是没有拿方片A给观众,这也 是有原因的。我们可以在上图这个13张牌排成的环中找到9和A,然后逆时针从9数到A,要数8次;如果从A数到9,只需要数5次。剩下的“大中小”三张牌 可以表示5,却表示不了8,所以老杰克把9给了观众,而当小杰克看到了A和5的信息后,在自己的脑海里从A逆时针数5下得到最后的答案9。

在整个魔术的过程中,老杰克和小杰克更像是完成了一次秘密通信,在表演开始前,两个人先要制定好这几条“通信协议”,之后有老杰克用那四张亮着的牌为藏在观众手中的牌进行加密,之后小杰克按照自己已经知道的规则进行解密,“感应”到那张牌的花色和数目。

这个五张纸牌的魔术曾经被很多人誉为“最精彩的数学魔术”,让很多人领略到了神秘的数学中的乐趣。


http://songshuhui.net/archives/37257
 

转载于:https://www.cnblogs.com/kuangxiangjie/archive/2010/12/21/1912220.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 魔术方法是Python中的特殊方法,它们以双下划线开头和结尾,例如__init__、__str__、__add__等。这些方法可以在类的实例化、运算符重载、属性访问等方面提供特殊的行为。 __init__方法是一个特殊的构造函数,用于初始化类的实例。__str__方法用于返回对象的字符串表示形式,可以通过print函数输出。__add__方法用于重载加法运算符,可以实现自定义的加法操作。其他常用的魔术方法还包括__eq__、__lt__、__gt__等,用于比较运算符的重载。 学习魔术方法可以让我们更好地理解Python面向对象编程的特性,提高代码的可读性和可维护性。 ### 回答2: 魔术方法是Python中最有趣且也是最强大的概念之一。魔术方法(也称为特殊方法或双下划线方法)是一些特殊的方法,它们以双下划线(__)开头和结尾,并具有特定的名称。 这些特殊方法可以为我们提供许多有用的功能,例如重载操作符,处理类的属性,实现自定义迭代器,使用描述符等。 下面是一些常见的魔术方法: __init__:这是最常见的魔术方法。当创建一个实例时,它会被自动调用。它用于初始化对象的属性。 __str__:当你想要将一个对象转换成字符串时,这个方法会被调用。如果你不指定__str__方法,Python默认会使用对象的类名和内存地址来表示对象。 __repr__:这个方法和__str__方法类似,也是用于将对象转换成字符串。但是__repr__方法在调试时有很大的作用,因为它返回的字符串可以用来唯一地标识对象。 __len__:这个方法可以返回对象的长度。例如,如果你想获取一个字符串的长度,你可以使用len("hello"),在底层,它实际上是调用了字符串对象的__len__方法。 __getattr__和__setattr__:这些方法允许你动态地获取和设置对象的属性。当你访问一个不存在的属性时,__getattr__方法会被调用。当你设置一个属性时,__setattr__方法会被调用。 __call__:这个方法允许你将对象作为函数调用。当你调用一个对象时,Python实际上是在调用对象的__call__方法。 除了上面列举的方法,还有许多其他的魔术方法,例如__cmp__,__hash__,__iter__等等。学习这些魔术方法将使你能够更好地理解Python的面向对象编程模型。 总之,学习和理解魔术方法是Python面向对象编程中的一个关键概念,因为它们可以帮助你实现更加灵活和强大的代码。如果你想成为一名Python高手,那么深入学习魔术方法是不可避免的。 ### 回答3: Python中的“魔术方法”指的是每个类中定义的特殊方法,它们以双下划线(__)开头和结尾,并且有着特定的用途。通过使用这些魔法方法,我们可以自定义类的行为,并为程序提供更高级别的功能。 以下是Python中常用的一些魔术方法: 1. __init__:这是最常用的魔术方法之一,它用于初始化一个类的对象,以及定义类的属性和方法。 2. __str__:此方法用于返回对象的字符串表示形式,类似于Java中的toString()方法。 3. __repr__:与__str__类似,但是返回的是对象的“官方”字符串表示形式,通常用于调试和开发。 4. __getattr__:当试图访问一个不存在的属性时,此方法被调用。 5. __setattr__:当尝试设置类的属性时,此方法被调用。 6. __delattr__:当尝试删除类的属性时,此方法被调用。 7. __call__:将对象作为函数调用时,此方法被调用。 8. __len__:返回对象的长度。 9. __getitem__:允许通过索引访问对象的元素。 10. __setitem__:允许通过索引设置对象的元素。 11. __delitem__:允许通过索引删除对象的元素。 通过了解和使用这些魔术方法,我们可以编写出更高效、更灵活、更具可读性的Python代码,并且实现类似于内置类型一样的功能。例如,我们可以实现一个自定义列表,类似于Python的list类型,然后使用上述魔术方法来访问、设置和删除元素。同时,我们还可以自定义变量和函数的行为,使我们的Python代码变得更具有表现力和弹性。 总之,了解和掌握Python的魔术方法是Python编程中必不可少的一部分,对于理解和编写实际应用程序非常有价值。在实践中,我们可以根据实际情况选择恰当的魔术方法,从而创建更灵活、更高效的Python类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值