前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:老方玩编程

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教程。

以上这些教程小编已经为大家打包准备好了,希望对正在学习的你有所帮助!

获取方式,私信小编 “ 资料 ”,即可免费获取哦!

用python代替人脑运算24点游戏的更多相关文章

  1. python实例:解决经典扑克牌游戏 -- 四张牌凑24点 (二)

    Hey! 如果你还没有看这篇的上文的话,可以去稍稍瞅一眼,会帮助加速理解这一篇里面涉及到的递归结构哦!(上一篇点这里:<python实例:解决经典扑克牌游戏 -- 四张牌凑24点 (一)> ...

  2. 经典趣味24点游戏程序设计(python)

    一.游戏玩法介绍: 24点游戏是儿时玩的主要益智类游戏之一,玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24.例如,2,3,4,6,通过( ( ( 4 + 6 ) - ...

  3. 24点游戏&&速算24点(dfs)

    24点游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  4. python开发_tkinter_小球完全弹性碰撞游戏

    python开发_tkinter_小球完全弹性碰撞游戏   完成这个小球的完全弹性碰撞游戏灵感来自于: 下面是我花了一周下班时间所编写的一个小球完全弹性碰撞游戏: 游戏初始化状态: 最下面的游标和修改 ...

  5. 【Nodejs】“快算24”扑克牌游戏算法

    算24是一款扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过四则运算得到结果24,四张牌必须仅用一次.这是一种挺好的锻炼孩子算数能力的扑克牌游戏. 各地玩法还有点差别,有的只算1-10,其它抽出来:有 ...

  6. Leetcode 679.24点游戏

    24点游戏 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24. 示例 1: 输入: [4, 1, 8, 7] 输出: True 解释: (8-4) ...

  7. php实现 24点游戏算法

    php实现 24点游戏算法 一.总结 一句话总结:把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算.在求表达式的过程中,最难处理的 ...

  8. Leetcode之深度优先搜索&回溯专题-679. 24 点游戏(24 Game)

    Leetcode之深度优先搜索&回溯专题-679. 24 点游戏(24 Game) 深度优先搜索的解题详细介绍,点击 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+, ...

  9. Java实现 LeetCode 679 24 点游戏(递归)

    679. 24 点游戏 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24. 示例 1: 输入: [4, 1, 8, 7] 输出: True 解释: ...

随机推荐

  1. vue项目创建与使用

    目录 复习 Vue项目环境搭建 Vue项目创建 pycharm配置并启动vue项目 vue项目目录结构分析 vue组件(.vue文件) 全局脚本文件main.js(项目入口) 改写 vue项目启动生命 ...

  2. 回文串的Manacher算法

    Manacher算法较传统算法的优化之处在于它对每个回文中心寻找回文半径的时候并不是都从半径为1开始找的,而是利用前面已经完成的任务,寻找一个初始的开始搜索的半径大小,复杂度是线性的. 参考博客:ht ...

  3. 题解 P5835 【 USACO19DEC Meetings S】

    前言 这道题目是道好题,想通了之后就可以把轻松这道题做出来. 正文 结论 先把一个结论写出来. 无论所有奶牛怎么走,它们的体重从左往右组成的序列是不会发生改变的. 这个结论简单地说明一下. 首先我们可 ...

  4. sql学习~pivot和unpivot用法

    pivot  可以把列值转换为输出中的多个列. pivot 可以在其他剩余的列的值上执行聚合函数. unpivot 将列转换为列值 语法 SELECT <non-pivoted column&g ...

  5. 干货|Python基础入门 课程笔记(三)

    目录 列表 元组 字典 三元表达式 一.列表 前面学习的字符串可以用来存储一串信息,那么想一想,如果现在有很多人,总不能每个人都起一个变量名把?那岂不得疯~ 咱们可以使用列表. (1)列表得格式和输出 ...

  6. nginx使用手册+基本原理+优缺点

    一.nginx优点 1.反向代理 1.正向代理: 客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原 ...

  7. coding++:RateLimiter 限流算法之漏桶算法、令牌桶算法--简介

    RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类 <dependency> <groupId>com.google.guava</g ...

  8. ElasticSearch 倒排索引

    倒排索引 倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况. 由于每个字或词对应的文档 ...

  9. iOS UITableView优化

    一.Cell 复用 在可见的页面会重复绘制页面,每次刷新显示都会去创建新的 Cell,非常耗费性能.  解决方案:创建一个静态变量 reuseID,防止重复创建(提高性能),使用系统的缓存池功能. s ...

  10. 移动自动化appium(2)- Allure报告使用详解

    6 Allure报告 6.1 Allure介绍 Allure是一个独立的报告插件,生成美观易读的报告,比之前的html好看,目前支持的语言:Java.PHP.Ruby.Python.C#等 6.2 A ...