- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
解决一种猜牌魔术的算法研究.doc
解决一种猜牌魔术的算法研究
Algorithm Researched to Solve One Kind of Guess Card Magic
Xu Yulong;Xu Chenggang;Gao Zhiyu;Sun Xiaojing
(①Institute of Information and Technology,Henan University of Traditional Chinese Medicine,Zhengzhou 450008,China;
②Institute of Systems Engineering,Xian Jiaotong University,Xian 700049,China)
摘要: 描述了一种流行的猜牌魔术,分析其实现过程,然后提出解决该魔术的计算机算法,并用程序仿真实现,最后采用不同的方法解决该问题,对比分析两种方法的时间复杂度及其优劣性。
Abstract: A popular guess card magic is described, and the process of implementation is analyzed, then the solving algorithm is proposed and simulated, finally, two different methods is used to solve this problem and their time complexity and performance are compared.
关键词: 魔术 算法 链表
Key words: magic;algorithm;linked list
中图分类号:TP311.5 文献标识码:A文章编号:1006-4311(2011)14-0203-02
0引言
近几年来,魔术在国内广泛流行,而很多魔术都与数学相关,计算机算法的基础是数学,利用计算机算法的高效性,更深入地揭秘和分析魔术原理是一个较好的方法。如对魔术花球自由度的分析[1],综合运用了旋量理论、多回路机构分析等方法,形象深入研究魔术花球的组成和机制。数据结构和图论中分析研究了几种魔术[2][3]。本文通过对一种猜牌魔术的分析,分析解决方法,然后用不同算法实现并对比其优劣性。
1问题描述
一副扑克牌中取出13张同一花色的牌,假设是黑桃,将迭牌按一定顺序打乱,然后牌正面下手握这迭牌,有什么魔法?就是只数数就能猜到每张牌是什么。开始表演,从上往下数牌,将最上面那张牌数为1,把它翻开是黑桃A,将黑桃A放在桌上,然后按顺序从上到下数手中的余牌。第二次数时,第一张牌数为1,第二张数为2,将第一张放在这迭牌的下面,将第二张翻过来,正好是黑桃2,也将它放在桌上。第三次数时,第一张数为1、第二张数为2、第三张数为3,将前面两张依次放在这迭牌的下面,再翻开第三张正好是黑桃3,这样依次进行将13张牌全部翻出来,准确无误。
2解决方法
2.1 采用简单的人工倒推在桌子上放13个空盒,将其排成一圈,选择任一作为开始,并将其从1开始编号,顺时针依次将所有盒子从1至13进行编号,然后从1号盒子开始数数,将黑桃A放入1号盒子,从下一个空盒开始对空盒计数,当数到第二个空盒时,将黑桃2放入空盒,然后再从下一个空盒开始对空盒计数,顺序放入3、4、5…,直到放入全部13张牌。注意在计数时要跳过非空的盒子,只对空盒子计数,最后按照盒子1到盒子13中牌的编号顺序,就是魔术师手中牌原来的顺序。这种方法能解出原始13排列顺序,但是若数据量增大,解决需要大量的时间。用计算机算法求解该问题,需要明确解决思路,下面用流程图对上述解决方法进行描述,如图1所示。
2.2 提炼算法根据上述解决思想和流程图,提炼解决算法。需要两个计数器,计数器1用于计数需放置当前牌的点数,该点数等于当前非空盒子的个数加1,计数器2用于放置每张牌时的计数,当放置完成每张牌时该计数器重设为1。算法1过程如下:
Step1:判断是否存在空的盒子,若为真转2,否则退出。
Step2:for(1,…m)m是盒子数。
Step3:判断当前盒子是否为空,若为真转4,否则转2。
Step4:判断两个计数器是否相等,若为真转5,否则转6。
Step5:将计数器中的值放入该盒子,计数器1的值自加1,计数器2的值重设为1,转7。
Step6:计数器2的值自加1,转7。
Step7:判断是否满足for(1,…m)循环,若为真转2,否则转1。
3实验对比
根据上述算法,分别用数组和链表两种方法实现其过程,并对不同数据量进行对比试验。系统平台WINX
文档评论(0)