前言
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:老方玩编程
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun
24点是一个老少皆宜的智力游戏。从一幅扑克牌中随机抽出4张,把这4张牌作为4个数字,参加游戏的人用这4个数字和基本的小学算术运算,使得计算的结果等于24。谁先算出来谁就赢得了游戏。
算24的游戏,对编程来说是一个不小的挑战。一般来说,需要通过某种方式,列出所有可能的算式,并判断哪个算式能够满足要求。好在,四个数字和简单的算术运算符号,列出所有的算式也不是很难。到网上去搜索一下,各种编程语言的实现,大部分是采用这种方法实现的。
如果不限制数字的个数,就需要用递归的方式了。我在之前的文章中,也用Python实现过,有兴趣的可以查看。
今天介绍一种模拟人脑的实现方式。人脑可能在多次游戏之后会积累一些经验,比如会知道比较容易实现的中间数值等。我们把这些经验先排除,找到人脑最初的思维过程。
人脑最初的实现过程是这样的:从4个数字中随机找出两个数字,然后从加减乘除中随机找出一种运算,得到一个结果。这个结果放回到剩下的2个数字中。继续从3个数字中随机找出两个数字,从加减乘除中随机找到一种运算,得出一个结果,并把这个结果放回剩下的一个数字中。把剩下的2个数字,用加减乘除中随机找出的一种运算,计算结果,看看是不是能等于24。然后重复上面的过程。人在遇到算24问题的时候,就是进行不断试错,最后找出答案的。因为人的计算能力有限,遇到需要小数等复杂运算时,就非常费劲了。
上面这个人脑的思维过程,完全可以用计算机来实现。人运算一次,电脑运算10万次都不会有问题。
下面给出实现的代码。代码中只做了10000次的尝试,并且测试了几个经典难题以及一个5个数字的题目。可以发现,10000次的尝试,对于5个数字以内的题目,可以找到几乎所有的答案。
测试结果(程序运行的输出结果,每次运行结果的顺序可能不同。):
题目:3 3 3 4
4+3=7 7*3=21 3+21=24
4+3=7 3*7=21 3+21=24
3*3=9 9-3=6 4*6=24
4+3=7 3*7=21 21+3=24
3+4=7 3*7=21 3+21=24
3+4=7 3*7=21 21+3=24
3+4=7 7*3=21 3+21=24
3*3=9 9-3=6 6*4=24
4+3=7 7*3=21 21+3=24
题目:3 3 7 7
3/7=0.42857142857142855 3+0.42857142857142855=3.4285714285714284 7*3.4285714285714284=24.0
3/7=0.42857142857142855 3+0.42857142857142855=3.4285714285714284 3.4285714285714284*7=24.0
3/7=0.42857142857142855 0.42857142857142855+3=3.4285714285714284 3.4285714285714284*7=24.0
3/7=0.42857142857142855 0.42857142857142855+3=3.4285714285714284 7*3.4285714285714284=24.0
题目:4 4 10 10
10*10=100 100-4=96 96/4=24.0
题目:5 5 5 1 8
5+5=10 8+10=18 5+18=23 23+1=24
1+5=6 5+5=10 10+8=18 6+18=24
1+8=9 5+5=10 5+10=15 15+9=24
1+5=6 5+8=13 5+6=11 11+13=24
5+5=10 1+10=11 11+5=16 16+8=24
8+1=9 9+5=14 5+14=19 5+19=24
1+5=6 5+8=13 13+6=19 5+19=24
1+5=6 5+5=10 6+10=16 16+8=24
5+5=10 8+1=9 9+5=14 10+14=24
5+5=10 1+8=9 10+9=19 19+5=24
1+5=6 8+5=13 13+5=18 6+18=24
1+5=6 5+5=10 10+6=16 8+16=24
1+5=6 6+8=14 5+5=10 14+10=24
8+5=13 5+1=6 6+5=11 11+13=24
8+1=9 9+5=14 5+14=19 19+5=24
5+8=13 5+1=6 13+6=19 5+19=24
5+5=10 1+10=11 5+8=13 13+11=24
5+5=10 8+10=18 5+1=6 18+6=24
1+8=9 5+5=10 9+5=14 14+10=24
1+5=6 8+6=14 5+14=19 5+19=24
1+5=6 5+6=11 11+8=19 5+19=24
8+5=13 5+13=18 18+5=23 1+23=24
5+8=13 5+13=18 1+5=6 6+18=24
5+5=10 1+10=11 5+11=16 16+8=24
5+1=6 6+5=11 8+11=19 19+5=24
5+5=10 8+5=13 1+10=11 11+13=24
5+5=10 10+5=15 8+15=23 1+23=24
5+1=6 8+5=13 6+13=19 5+19=24
5+8=13 1+5=6 5+13=18 18+6=24
5+5=10 5+8=13 10+1=11 11+13=24
1+5=6 5+8=13 13+5=18 18+6=24
5+5=10 8+5=13 13+1=14 10+14=24
8+5=13 5+5=10 13+1=14 10+14=24
8+5=13 5+5=10 13+10=23 23+1=24
1+5=6 5+5=10 8+6=14 14+10=24
5+8=13 1+5=6 5+6=11 11+13=24
2020年最新Python教程:
如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?
说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。
以上这些教程小编已经为大家打包准备好了,希望对正在学习的你有所帮助!
获取方式,私信小编 “ 资料 ”,即可免费获取哦!
原文地址:https://www.cnblogs.com/python0921/p/12642015.html