给定n个数字,计算出一个满足24点的表达式:比如1,11,2,1:(11+1)*2/1

基本思路就是枚举计算顺序(在一开始进行一次全排列),括号,加减乘除。其实有很多是重复计算过了的。这个程序我为了高效找到一个解就算了,但是我们把程序稍微修改就可以找到所有的解(表达顺序可能会重复,比如1+2和2+1),同时也可以计算多个数字的组合。

def compute(x,y,op):if op=='+':return x+yelif op=='*':return x*yelif op=='-':return x-yelse:return x/y if y else Nonedef exp(p,iter=0):from itertools import permutationsif len(p)==1:return [(p[0],str(p[0]))]operation = ['+','-','*','/']ret = []p = permutations(p) if iter==0 else [p]for array_n in p:#print(array_n)for num in range(1,len(array_n)):ret1 = exp(array_n[:num],iter+1)ret2 = exp(array_n[num:],iter+1)for op in operation:for va1,expression in ret1:if va1==None:continuefor va2,expression2 in ret2:if va2==None:continuecombined_exp = '{}{}' if expression.isalnum() else '({}){}'combined_exp += '{}' if expression2.isalnum() else '({})'new_val = compute(va1,va2,op)ret.append((new_val,combined_exp.format(expression,op,expression2)))if iter==0 and new_val==24:return ''.join(e+'\n' for x,e in ret if x==24)return ret
print(exp([2,3,4,11,1,3]))

做的一点优化:记忆式搜索做的一点优化:记忆式搜索

EXP = {}
def exp(array_n,target,iter=0):if len(array_n)==1:return [(array_n[0],str(array_n[0]))]operation = ['+','-','*','/']ret = []for num in range(1,len(array_n)):exp1 = array_n[:num]exp2 = array_n[num:]ret1 = EXP[exp1] if exp1 in EXP else exp(exp1,target,iter+1)ret2 = EXP[exp2] if exp2 in EXP else exp(exp2,target,iter+1)EXP[exp1] = ret1EXP[exp2] = ret2for op in operation:for va1,expression in ret1:if va1==None:continuefor va2,expression2 in ret2:if va2==None:continuecombined_exp = '{}{}' if expression.isalnum() else '({}){}'combined_exp += '{}' if expression2.isalnum() else '({})'new_val = compute(va1,va2,op)ret.append((new_val,combined_exp.format(expression,op,expression2)))if iter==0 and new_val==target:#print('ans')return ''.join(e for x,e in ret if x==target)return ret if iter else None
def search(array):record = set()from itertools import permutationsfor p in permutations(array):if p in record:continuerecord.add(p)ret = exp(tuple(p),100)if ret:print(ret);break

python实现二十四点相关推荐

  1. CCF-CSP 201903-2 二十四点 Python语言 模拟栈实现

    项目场景: 二十四点问题本质是处理表达式,一提到处理表达式第一反应大概就是使用栈来处理,虽然网上大部分使用python语言处理二十四点问题都是利用强大的eval()函数,但我仍然想要使用python的 ...

  2. CCF-CSP 201903-2 二十四点(python实现)

    题源来自---CCF计算机职业资格认证官网,点击报名入口,可进行模拟考试进行练习.代码在最后. 代码 应用eval函数 eval:将传入的字符串当成有效的表达式来求值并返回计算结果. n=int(in ...

  3. 从LeetCode 679. 24 Game--C++ 解法--二十四点 到穷举24点所有可能性-24点大全

    从LeetCode 679. 24 Game–C++ 解法–二十四点 到穷举24点所有可能性 此文首发于我的个人博客:zhang0peter的个人博客 LeetCode题解文章分类:LeetCode题 ...

  4. CCF201903-2 二十四点(100分)【表达式计算】

    问题链接:CCF201903-2 二十四点 问题分析: 表达式计算问题,关键是对输入流进行处理,需要考虑表达式中运算符的优先级.简单的逻辑,用穷举法就可以了. 用Python语言来实现的话,问题就简单 ...

  5. CCF-CSP 201903-2二十四点 三种方法 满分题解 结尾附惊天方法

    CCF-CSP 201903-2二十四点 三种方法 满分题解 结尾附惊天方法 题目链接:CCF-CSP 201903-2二十四点 方法一思路: 1.通读题意,发现该表达式仅由4个数字和3个四则运算组成 ...

  6. CCF CSP201903-2二十四点

    CCF CSP201903-2二十四点 题目描述 要点分析 此题是典型的中缀表达式的求解问题, 可以采用堆栈求解. 具体计算思路: 使用两个栈, num用于存储操作数, opt用于存储操作符 从左往右 ...

  7. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  8. 『牛角书』基于JS实现的鸿蒙游戏——二十四点纸牌

    目录 前言 概述 正式开始 一.创建项目 二.编码 1.项目结构 2.实现思路 3.主要代码块 三.页面及功能展示 1.运算正确 2.运算错误 3.换一批及重置 本人项目仓库链接 前言 相信大家都有玩 ...

  9. CCF 201903-2 二十四点 用栈模拟简单计算器

    二十四点 来源:CCF 背景 二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24. 题目 定义每一个游戏由 4 个从 1-9 的数字和 3 个四 ...

  10. 「csp模拟试题 201903-2」二十四点 C/C++ 100分

    目录 题目 输入输出样例 题解思路 题解源码(c/c++) 题目 :二十四点 [问题描述] 定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号 ...

最新文章

  1. openoj的一个小比赛(F题解题报告)poj3978(dp+素数筛选)
  2. 单片机sleep函数的头文件_单片机学习day8—单片机IO扩展
  3. html5 canvas绘制圆形进度实例
  4. tf.lookup.StaticHashTable 用法
  5. 昨天,JetBrains 推出“下一代 IDE”,快看看有哪些值得期待的功能!
  6. golang 绘图库_golang入门-- 一个2D的图形库学习
  7. cms php vue 开源_2020最受欢迎的企业网站CMS建站系统排行榜
  8. 如何在云服务器上使用Docker部署easy-mock
  9. ARP (地址解析协议)
  10. Why Every Organization Needs an Augmented Reality Strategy?How Does Augmented Reality Work?
  11. Fizz Buzz @leetcode Math
  12. Port Security (端口安全)
  13. VMware安装macOS High Sierra V10.13.6完整版
  14. centos下ftp安装及添加账户
  15. 拾色器 插件 Farbtastic
  16. C#编写的Word操作类,有换页,添加表格,文本功能
  17. XAML与XML的区别
  18. Java27岁啦——一次争执引起的Java内卷生涯
  19. Velodyne CEO离职背后:风光不再,频频内斗,激光雷达巨头面临内忧外患
  20. 计算机网络自顶向下方法笔记02

热门文章

  1. $.ajax %5b%5d,数据传回后台数带有%5B%5D的问题
  2. python中三角函数运算符_Python入门之三角函数sin()函数实例详解
  3. [BZOJ1597]土地购买
  4. P2P继续停止...
  5. 使用GPG加密通讯,设置git提交验证密钥
  6. java 数独算法_[Java] 数独生成和求解
  7. a+b / a-b / a*b / a/b c++问题题解
  8. 正则表达式匹配经纬度
  9. 做到这几点在家也能拍出好看的证件照
  10. Unity 之 发布 WebGl 遇到的问题