用python代替人脑运算24点游戏

前言

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

作者:老方玩编程

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

时间: 2024-11-09 00:44:11

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

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

一.游戏玩法介绍: 24点游戏是儿时玩的主要益智类游戏之一,玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24.例如,2,3,4,6,通过( ( ( 4 + 6 ) - 2 ) * 3 )  = 24,最快算出24者剩. 二.设计思路: 由于设计到了表达式,很自然的想到了是否可以使用表达式树来设计程序.本程序的确使用了表达式树,也是程序最关键的环节.简要概括为:先列出所有表达式的可能性,然后运用表达式树计算表达式的值.程序中大量的运用了递归,各个递归式不是很复杂,

24点游戏的算法实现

根据要求实现一个24点的游戏算法,要求如下: 输入:n1,n2,m1,m2 如果这个四个数的运算结果是24,则输出运算表达式 如11,8,3,5 输出:(11-8)*(3*5)=24 解法一:蛮力法,遍历所有的表达式组合,首先遍历所有的数字的排列组合,然后遍历运算符的组合,然后计算出 这个表达式的值,看其是否等于24 测试输入: 5,5,5,1 3,3,7,73,3,8,81,4,5,6 3,8,8,10 4,,410,10 9,9,6,2 11,8,3,5 #---*--- encoding=

24点游戏

题目描述 给出4个正整数操作数,你的任务是使用运算符(+,-,*,/)和括号对操作数进行计算,分析是否能得到24,每个操作数只能使用1次,运算符和括号可以多次使用,注意所有的中间结果都是整数. 输入 输入包括多行,每行4个正整数,范围是[1,13],输入以0 0 0 0标记结束 输出 若输入的4个操作数能计算出24,输出Yes,否则输出No 样例输入 1 1 1 1 2 5 7 8 0 0 0 0 样例输出 No Yes #include<iostream>   #include<str

微信公众平台开发—24点游戏

一.源码 package org.xs.dntown.wx.game24.modules.web; import java.text.NumberFormat; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Random; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager

24点游戏(dfs)

24点游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 2424点就是给你一串数字,问你是否通过加减乘除括号构成2424点. 沈爷觉得这个很好玩,就决定考考你,给你44个数,可以交换位置,可以用加减乘除和括号,是否能构成2424点呢? 注意哦~这里的除法并不是整数除法,比如样例 Input 第一行TT,表示有多少组测试数据,1≤T≤501≤T≤5

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

python开发_tkinter_小球完全弹性碰撞游戏 完成这个小球的完全弹性碰撞游戏灵感来自于: 下面是我花了一周下班时间所编写的一个小球完全弹性碰撞游戏: 游戏初始化状态: 最下面的游标和修改小球的移动速度 =================================================== 源码部分: =================================================== 1 #python tkinter 2 #python versio

编程之美-1.16 24点游戏

一.问题描述 给玩家4张牌,每张牌牌面值在1~13之间,允许其中有数值相同的牌.采用加.减.乘.除四则运算,允许中间运算存在小数,并且可以使用括号,但每张牌只能使用一次,尝试构造一种表达式,使其运算结果为24. 如 输入:3 3 7 7 输出:(((3)/(7))+(3))*(7) 二.程序实现原理 遍历所有可能的组合,直到找到一个符合条件的组合或者遍历所有情况没有找到满足的组合,具体详见代码注释 三.程序基本实现 #include<iostream> #include<string&g

24点游戏问题

24点游戏问题 标签(空格分隔): OJ_算法 1. 题目描述 问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入:4个1-10的数字.[数字允许重复,测试用例保证无异常数字] 输出:True or False 2. 问题求解(穷举法) ??利用穷举法,列出所有可能的表达式,然后计算表达式的值,问题便求解. 此问题可以分解为两步: 1. 列出所有可能的表达式 2. 计算法表达式(四则混合运算)的值 2.1 列出所有可能的表达式 表达式由输出的四个数字(1~10).3个加

Leetcode 679.24点游戏

24点游戏 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24. 示例 1: 输入: [4, 1, 8, 7] 输出: True 解释: (8-4) * (7-1) = 24 示例 2: 输入: [1, 2, 1, 2] 输出: False 注意: 除法运算符 / 表示实数除法,而不是整数除法.例如 4 / (1 - 2/3) = 12 . 每个运算符对两个数进行运算.特别是我们不能用 - 作为一元运算符.例如,[1, 1, 1, 1] 作为输