博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第3-5课:24 点计算器
阅读量:3574 次
发布时间:2019-05-20

本文共 673 字,大约阅读时间需要 2 分钟。

24 点游戏是一个很有意思的数字游戏,也是一道常见的算法面试题。题目是这样的:任给四个数(为了便于人们心算或口算,一般都是小于 10 的数),对四个数字用各种组合进行加、减、乘、除四则运算,看看结果是否能等于 24?对于面试题来说,这是一个典型的穷举类型算法问题。这个题目比较有意思的地方是它除了要对数字组合进行枚举,还要对四个运算符进行组合。这一课我们要介绍的方法有点特殊,它没有简单地使用穷举遍历,而是采用穷举法和分治法相结合的方法来解决这个问题,这种方法比数字 + 运算符一起枚举的方法简单,容易理解,整个算法只有大约 40 行有效代码,其中主体部分有效代码只有不到 20 行,快来看看是怎么回事儿吧。

问题分析与建模

这个算法问题的难点主要有两个,一个是数字和运算符的穷举遍历,另一个是将四则运算表达式作为结果输出。无论是运算符遍历还是表达式输出,都要考虑运算符的优先级,必要时要加括号。当然,也可以采用后缀表达式的形式,避免在枚举遍历的过程中考虑括号的问题。一般我们书写和计算都采用中缀表达式,中缀表达式的特点是运算符始终位于两个操作数的中间,对于运算符的优先级采用括号的方式解决,比如以下四则运算采用的就是中缀表达式的形式:

7 + ( 3 + 2 ) × 4 − 8

后缀表达式又称为“逆波兰表达式”,上述中缀表达式转换成后缀表达式后就是这个样子:

732 + 4 × + 8 −

后缀表达式通过运算符的位置来决定计算顺序,避免使用括号,便于计算机计算处理。后缀表达式的求解计算一般用栈比较方便,具体的方法就是从左向右扫描表达式&#

转载地址:http://wccgj.baihongyu.com/

你可能感兴趣的文章
字符串在html中的页面中的换行
查看>>
react父子组件间的通信和传值
查看>>
vue-cli3.0设置环境变量
查看>>
vue父组件直接操作子组件的方法(不通过$emit和$on)
查看>>
vue上传文件到UCloud
查看>>
获取input选择文件的本地地址
查看>>
React绑定全局方法或变量
查看>>
js监听div标签上面的自定义属性
查看>>
navcat如何重置窗口
查看>>
代码注入
查看>>
off-by-one
查看>>
ctf-pwn的一些小技巧
查看>>
POJ 1915 Knight Moves
查看>>
Git 撤销修改
查看>>
Git 删除文件
查看>>
Git与远程仓库关联以及关联错误解决方法
查看>>
[HDU] 平方和与立方和
查看>>
[HDU 2096] 小明A+B
查看>>
[HDU 2520] 我是菜鸟,我怕谁(不一样的for循环)
查看>>
[HDU 1215] 七夕节(求因子,不超时)
查看>>