撕下来扑克牌,那也就是 打乱以后的数组克隆一份相加 String[] poker2 = new String[8]; for (int i = 0; i < poker1 1,必须相同否则会有问题 //魔术步骤1:你的名字几个字 就往下排几张 ok,我就写2个字吧,那就是把这个数组位置替换2个位置,第一个拿走的位置 就是下标1,第二个拿走的位置就是下标0 //魔术步骤2:前面三张扑克牌,插入到中间的任意位置,我就将除第一个 最后一个随机打乱 String[] extracted = Arrays.copyOfRange(poker2, 0 ; //todo 经过这一个步骤,聪明的你又看出来问题了,无论怎么操作,只要插入到非第一张和最后一张的位置, // 第一张和最后一张永远是一样的 // 魔术步骤 //魔术步骤5:见证奇迹的时刻 ,7个字这边就定义7次循环了 // 循环7次,每次将最后一个元素移动到第一个位置,其他元素前移 for (int i = 0; i < 7
昨晚春晚上刘谦的两个魔术表演的都非常 nice,其中第二个魔术就是非常经典的约瑟夫环问题! 先来讲一下什么是约瑟夫环问题。 比如牌是8张,编号分别是1 2 3 4 5 6 7 8 第一轮会把2 4 6 8扔掉,剩下1 3 5 7按顺序放在后面,又退化成了4张牌的情况。 比如牌的张数是11,等于8+3。把1放到后面,把2扔掉 把3放到后面,把4扔掉 把5放到后面,把6扔掉 现在剩下的编号序列是7 8 9 10 11 1 3 5 这又是8张牌的情况了! 魔术的流程是这样的: 1、4张牌对折后撕开,就是8张,叠放在一起就是ABCDABCD ❗️注意ABCD四个数字是完全等价的 2、(无关步骤)根据名字字数,把顶上的牌放到下面,但怎么放都不会改变循环序列的相对位置 print(f"步骤8:把牌堆顶一张牌放到末尾,再移除一张牌,直到只剩下一张牌。")
前言 随着 2024 年春晚的落幕,刘谦的魔术表演再次成为了人们热议的焦点。 从 2009 年到 2019 年,刘谦 10 年间 5 次亮相央视春晚舞台,一句“见证奇迹的时刻”成为刘谦的招牌台词。 但从 2019 年在春晚表演《魔壶》之后,刘谦好像销声匿迹了,连续 5 年都与春晚无缘。 2024 年 2 月 9 日晚,刘谦终于带着最新魔术节目《守岁共此时》再次亮相春晚,神乎其技的表现让观众直呼不可思议。 今天,我将尝试从编程的角度来揭秘刘谦的魔术,通过代码实现来解析其背后的原理。 一、魔术大概流程 观众们按照一定的顺序撕开扑克牌,通过名字字数、男女性别、南方北方等关键词进行排序筛选,最终丢弃了大部分的碎牌。而剩下的两张碎牌,竟然神奇地凑成了一张完整的牌。 bottom = bottom(arr, 1); arr = pop(bottom); } return arr; } } 结果: 四、总结 刘谦老师的魔术本质其实就是约瑟夫环的问题
在大年三十的春晚上,刘谦呈现的两个魔术表演真是令人叹为观止。尤其是那第二个魔术,他以高超的技艺演绎了经典的约瑟夫环问题,让人不禁感叹他的魔术才华与幽默风格相得益彰! 什么是约瑟夫环问题? 2、稍微复杂一点的情况,牌的张数是2的n次方 比如有8张牌,编号分别是1、2、3、4、5、6、7、8。 第一轮会把2、4、6、8扔掉,剩下1、3、5、7按顺序放在后面,又退化成了4张牌的情况。 把1放到后面,把2扔掉,把3放到后面,把4扔掉,把5放到后面,把6扔掉,现在剩下的编号序列是7、8、9、10、11、1、3、5,这又是8张牌的情况!最后一定剩下的是现在牌堆顶的7! 魔术的流程 4张牌对折后撕开,就是8张,叠放在一起就是ABCDABCD。注意,ABCD四个数字是完全等价的。 根据名字字数,把顶上的牌放到下面,但怎么放都不会改变循环序列的相对位置。 但无论怎么操作,第4张和第8张牌都是一样的。 把顶上3张插到中间任意位置。这一步非常重要!因为操作完之后必然出现第1张和第8张牌是一样的!
今天我们来看一个近10年前的经典,相信这个魔术表演能勾起不少人童年的回忆。 刘谦春晚表演《幻境》 先回顾一下这经典之作吧! 视频1 刘谦春晚《幻镜》 //v.qq.com/txp/iframe/player.html? 其中我们要讲解的对称相关的部分,大概从6:35到8:25左右结束,其余部分也非常精彩,也可以全部看完,堪称经典。 忘了是什么时候从哪个大师那里学到(也许就是刘谦吧),一个完整的魔术节目一定还要有一个贯穿始终的主题。当然,只是做一个手法展示,道具展销的除外。 其它部分不多说了,主要讲下刘谦名字在镜子中变得正常而手上真的字变反的这个部分。
今年的春晚上刘谦表演了魔术《守岁共此时》,台上台下积极互动(尤其是小尼),十分的有趣。刘谦老师的魔术不仅仅是他的高超手法,还有这背后的严谨逻辑,下面我们来用C语言来解析魔术吧。 for (int i = 0; i < 4; i++) { scanf("%d", &card[i]); // 输入四张牌的数字 } int cardend[8] ; for (int i = 0; i < 4; i++) { cardend[i] = card[i]; } for (int i = 4; i < 8; &sex); for (int i = 0; i < sex; i++) { cardmove[i] = 0; } int numbercard = 8 endcard = cardmove[i]; } } printf("剩下的第一张为%d\n", endcard); 输出最后剩下的一张牌的数字,魔术结束
上一讲我们刚讲完魔术的结构层次和对应的评价策略,详情请戳: 魔术的定义、评价与分类(三)——魔术的内部结构层次和专业评价 魔术的定义、评价与分类(二)——商业评价 魔术的定义、评价与分类(一)——定义 当时留了个尾巴,给出了刘谦在国家魔术人才培养计划中的结构解析的板书。 图1 刘谦魔术课的结构拆解板书 https://www.bilibili.com/video/BV12g4y1c7sp/? 当然刘谦本人还有课堂里上他课的真魔术大师,应该本质上都优先是表演大师,然后才基于这个目标去研究原理。而我是倒过来的,原理太迷人了,为了把原理搞透,推广出去,我不得不补齐我的表演短板。 4. 下一篇,我们进入魔术理论最后一个话题,魔术的分类。 我们是谁: MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。
魔 术 步 骤 首先,准备4张扑克牌,跟随魔术步骤,来一起“见证奇迹”。 就取出牌堆顶一张牌放置在牌堆底 步骤 7 执行如下操作 从牌堆顶开始 每次先将牌堆顶的一张牌放在牌堆底 再扔掉牌堆顶的一张牌 重复以上操作直到只剩一张牌 检查此牌和放置在一旁的牌是否吻合 若吻合,则魔术成功 按照上面的魔术步骤用C/C++进行模拟和暴力破解 代码如下 #include <iostream> #include <vector> #include <algorithm> using = { {1}, {2}, {3}, {4}, {1}, {2}, {3}, {4} }; cout << "初始卡牌: "; printDeck(deck); // 模拟魔术步骤 << endl; } else { cout << "魔术失败!最后一张牌与预留的牌不符。"
今年春晚刘谦的魔术堪称惊艳全场,那么他这个魔术实现的原理是什么呢?今天,就让咱们使用 JS 是实现这个魔术。 情景二:牌数为2的n次幂 设想有8张牌,编号从1到8。在第一轮中,我们会移除所有偶数编号的牌(2、4、6、8),剩余1、3、5、7。这些剩下的牌按顺序放到底部,问题就变成了4张牌的情况。 但无论怎么操作,第4张和第8张牌都是一样的。 将顶部3张牌随意插入中间,确保第1张和第8张牌相同。这一步非常重要!因为操作完之后必然出现第1张和第8张牌是一样的! console.log(`步骤8:把牌堆顶一张牌放到末尾,再移除一张牌,直到只剩下一张牌。 ${arr.join('')}`); } console.log(`---\n最终结果:剩下的牌为${arr[0]},步骤4中留下来的牌也是${restCard}`); 通过上述代码,我们可以模拟刘谦春晚魔术的整个过程
,两面等价时候看作一个D8群,那么首先以正面箭头向上作为基准,也就是幺元e,那么魔术中所经历的几个动作依次为: 1. 刘谦《幻境》 你一定以为流程这么复杂,这么硬核的数学魔术没有什么实际的魔术价值,登不上正统的魔术舞台。 那你还真错了,在刘谦春晚上爆红的作品《幻镜》,有一个小步骤,我在上个系列的《对称与魔术初步(五)——刘谦经典魔术《幻境》》曾用一般语言详细讲解过,其基本原理用群论语言描述下来就是这个样子的,大家可以先回顾一下表演 : 视频2 刘谦春晚《幻镜》(大概从6:35到8:25左右) //v.qq.com/txp/iframe/player.html? 镜面反射(关于为什么镜面反射等价于左右对称,我在《对称与魔术初步(五)——刘谦经典魔术《幻境》》里已经讲解过,后续还会有数学专题再聊)后,变成f2 * f1 = R,即观众在镜子里看到的是一个旋转了180
我现在还深刻记得刘谦很久以前在《越策越开心》节目里变钞票进橙子魔术的时候,把指套插入橙子以后深深地吸了一口自己的大拇指,还有在需要换托的时候夸张地用手指点了口水当胶水去封信封的画面,以及常见的夸张的表情 而在魔术里,除了上述对比构造的夸张,突出等基本效果外,还有一个成型的魔术结构就用的这个手法,在马克威尔逊的书中叫做DIY: Do it yourself! 即跟我做魔术。 所以啊,魔术再简单,一般观众也没空去记得那些流程和秘密的,不信你问,有多少人记得刘谦09年春晚用橡皮筋干啥了,怎么变的?关键是你能演好,留下深刻印象,那在这个观众心里,这个魔术就是你的。 哪怕仅仅是来当个托,选个牌,都是好的,这样使得魔术还直接发生在魔术师和观众之间,这种低成本的有带入感的魔术效果。何乐而不为呢? 有一个经典的案例,你一看应该就明白了:刘谦的经典流程,消失的水。 大约16年前我还在读小学的时候,刘谦参加魔星耀三湘活动来了我当时就读的长沙长塘里小学,他当着上千的孩子在操场上表演了消失的水。
其实这里的应用方法,和上一个对称系列《对称、群论与魔术(十一)——魔术《百变箭头》等和系列总结》中的主要魔术类型,即对称合理操作的原理是比较类似的,即对称合理等价的操作使得魔术师的选择都合理,但是却是精心选择的唯一能达成魔术巧合效果的方法 3 or 8 先来看表演。 视频1 3 or 8 这个魔术源自Karl Fulves的系列作品Fine Print,大师们的佳作总是遗落在各个不起眼的角落,需要用心才能挖掘得到。 具体来说,有这么几个要点: 8可以看作3以及其中心对称图的并集。换句话说,一个8可以由一个3和另一个中心对称的3组成(这已经不是个数字了)。 还真行,如果位置在(4, 8),此时执行k = 6,5,4,3这4次翻转,就能够使得所有牌各就各位,原来的4,8两张处在相同的和其他不同的CATO相位上,大功告成! 视频2 69式数字预言 我们是谁: MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。既取其用数学来变魔术的本义,也取像魔术一样玩数学的意思。
新时代的魔术世界 这是魔术最好的时代,也是魔术最坏的时代,而且都是基于同一个原因: 信息的爆炸式传播。 指望着破解或学到几个魔术的秘密就成魔术师?哪有那么好的事呢? 如何和魔术秘密舒服地共处? 破解魔术秘密,一点不厉害,那是一群观众去对抗一个魔术师,研发出魔术才叫真正厉害。 这让我想起很早以前金牌魔术团节目中汪涵在一个选手表演完后,就是这么说的,后来刘谦对那个当众说出魔术秘密的人的说: 如果一个人能够当众揭秘魔术,那他没有资格当魔术师。 而魔术表演者呢?你当场揭穿他,如果是爱好者,反正不靠这个吃饭,尴尬一下就过去了;魔术师的话,你就更不可能影响他,你的自娱自乐,他的挣钱要紧。 你看春晚魔术每年揭秘影响到刘谦在圈内外的认同了吗? 刘谦让人一见就想起见证奇迹,大卫从头到脚都是一股坚定而神秘的感觉,这些风格的塑造,才是他们安身立命之本,他们从来没有要当魔法师,这超出边界了,但是是以魔术师的身份在扮演他。
数学到魔术的模型: 注意看前文的那个公式,在魔术里,a往往是预先准备好的setting,b是观众的随机选择,而结果的a则是魔术效果,可以是预测,也可以使4Ace出现这样的美丽展示。 好,接下来,只需要去在魔术中用故事和画面去编排这些枯燥的操作,构建上面的恒等式,魔术便设计完成了。 魔术部分: 第一个魔术是一类魔术4Ace presentation的我自己的修缮版本,这个效果一般快速地可以由setting加简单手法直接变出(参看刘谦《近近景近景》的相关内容)复杂一点的手法也可以看起来更炫和神秘一些 ,且注意被预测那一张是原第(a + 1)张,也是减去的那个集合的最后一张,而其余各关联位置的扑克牌也在掌控之中,居然把一张牌的预测原理通过魔术师的想象扩展成了4Ace加4Kings的8倍效果的画面,真是不可思议 第二个表演则是同一个原理的预测效果的展现版本,印象中在《魔星高照》名人变魔术单元中刘谦曾经表演过类似的效果。这个展现方式没有那么多美丽画面但是胜在心理上的不可能和震撼的感受。
Testpublic void demo1(){ System.out.println("晚会现在开始"); //周杰伦唱歌 new Jielun().sing(); //刘谦表演魔术 ; //迈克尔杰克逊跳舞 new Michael().dance(); System.out.println("晚会结束");} 这是用Java代码模拟的一场晚会,顺序就是唱歌、表演魔术 这个时候我们就可以抽象出一个接口Singer /*** 歌手的接口,每个歌手都应实现这个接口*/interface Singer(){ void sing();} 其它的也可以抽出接口 /*** 魔术师的接口
这里的递归结构很明显了,而且在观众看来和魔术师解析实际流程起来是两个不同的角度: 看起来:3张 -> 4张-> 4张 -> 4张 -> 4张 -> 4张 ->4张 -> 1张 实际上:8张 -> 8张- > 7张 -> 6张 -> 5张 -> 4张 ->3张 -> 1张 所以从逻辑结构上看,这个魔术需要的手法是可以顺理成章推出来的: 手法:8假装3,8展示4,7展示4,6展示4,5展示4,3展示4 而4 记得在一些4~8张的流程中都有triple甚至buckle底牌翻一叠的操作,而有些对牌面的连续展示,单个动作来看都是有问题的,但是合在一起有一定的节奏,速度和本身的期待就没有问题。 另外,我们也尽量要在每一次动作上加一些不同的元素,一方面防止因为重复隐藏秘密,另一方面也增加一些变化而不无聊,而且从整体上通过相似性扩展强化整体的交代干净的过程: 8展示4:仅ElmsleyCount, 这让我联想到了刘谦《眼花缭乱》表演中的硬币矩阵里最后回到原位的惊艳效果以及在刘源的Hofzinser Ace Problem中那个干净的Ace全部翻转。
在上一篇文章中,我们介绍的魔术《69式数字预言》用到的是单个数字的中心对称性,再往前的《3 or 8》则是一个很巧妙的阿拉伯数字内部的对应关系,相关内容请戳: 文字对称中的数学与魔术(五)——魔术《69 式数字预言》 文字对称中的数学与魔术(四)——魔术《3 or 8》 文字对称中的数学与魔术(三)——汉字到中文的对称性 文字对称中的数学与魔术(二)——英文字母到单词的对称性 文字对称中的数学与魔术 那显然,bc就是69的组合,而a可以是0,1和8! 于是我选定了968这样一个吉利的数字,转一圈以后是896,再倒回去,我们需要的原始单位元排列就是689了。 再仔细观察一下这个968,其实规律就很明显了,因为69互为中心对称图形,那么自身形成的子串就是完整的中心对称图形,和另一个中心对称图形8连成的二元序列,作中心对称的话,因为自身值都不变于是就把好好的在二元情况下的翻转操作生生地退化等价为对换操作 视频1 the 9 视频2 刘谦春晚《幻境》 视频3 47 or 七九 我们是谁: MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。
在前面的文章中,我们从文字字符到序列,介绍了很多文字对称的作品了,相关内容请戳: 文字对称中的数学与魔术(七)——刘谦作品《74 or 九七》等 文字对称中的数学与魔术(六)——魔术《689的预言》 文字对称中的数学与魔术(五)——魔术《69式数字预言》 文字对称中的数学与魔术(四)——魔术《3 or 8》 文字对称中的数学与魔术(三)——汉字到中文的对称性 文字对称中的数学与魔术(二)—— 首先这里颜色上,只能选择中立的蓝色等,避免颜色的不对称性,假设花色部分中心对称了,那点数也需要,由于扑克牌没有1和0,那能够有完美中心对称性的就只有8了!于是黑桃8和红心8就是我的目标了! 一开始我用一般的思路横着写,发现虽然黑桃8和转过来的8红心两种念法问题倒是不大,但是明显这个底板没法解决。那试试竖着来呢,这个底板当是底板的时候就是底板,而在顶部的时候,当一个吊顶不就完美解决了! 图1 红心8 vs 黑桃8 正是这个创作,为这个魔术的改进收官! 我喜欢这思考和创作的感觉!
在工作中,他是沉迷数学研究的搜索算法工程师;在舞台上,他是善于为观众带来惊喜的数学魔术师。程序员与魔术师的双重身份会碰撞出怎样的火花?让我们一起来走进他的故事。 业余研究魔术16年,是资深的数学魔术爱好者。其极客般的理工思维使得他的魔术风格独树一帜,逻辑严密,富有美感。 接触魔术的契机 大概比数学晚一点,小学毕业前在外公家的电视上看到《魔星高照》节目里刘谦徒手点亮了一个电灯泡,当时突然觉得:哇,怎么可能有这样的事情! 从此就开始爱上了魔术,而且一定要钻研到底是怎么做到的。 感性与理性思维的平衡与启发 人类天然有理性和感性两种思维。 近景魔术最核心的秘密其实就是错误引导。能够做到这一点的前提就是要分析观众的认知规律,他会看哪里、会注意哪里。
相关回顾请戳: 科比和刘谦教会我:学会接受诋毁和攻击,是一门人生必修课! 刘谦回忆录 昨天春晚有魔术?我怎么没印象? 好了,今天数学魔术师的分享就到这里,希望各位客官喜欢,期待你的转发和赞赏哦! 我们是谁:MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。 既取其用数学来变魔术的本义,也取像魔术一样玩数学的意思。 文章内容涵盖互联网,计算机,统计,算法,NLP等前沿的数学及应用领域;也包括魔术思想,流程鉴赏等魔术内容;以及结合二者的数学魔术分享,还有一些思辨性的谈天说地的随笔。 ——逻辑推理浅谈(二)循环、递归与魔术(五)——再谈递归的魔术逻辑与欣赏Roberto Giobbi的纸牌大学我的亲子魔术首秀 点击阅读原文,往期精彩不错过!