此处的’24点’并不指午夜,而是一种游戏~
之前看到了一道四则运算相关的程序题,遂而想到了24点游戏,觉得有趣,就想自己随手编写了一个,起初觉得应该比较简单,但实际的路途却并不平坦~
最开始要解决的就是算式的求解问题(输入字符串形式的四则算式,返回算式结果),对于很多脚本语言,都有内建的机制可以使用: 譬如 JS 中 eval, Lua 中的 load 等等,不过还是自己编码开发一下更有趣味些,所以使用传统的双栈(操作数栈和运算符栈)算法实现了一番,这里有了第一点感悟:
可以解析求解四则运算之后,接下来的工作就是24点游戏的”业务逻辑”了,首先要解决的一个问题是: 给定四个数字,判断是否可以计算得到24(每个数字使用一次并仅使用一次)
穷举四个数字间所有的四则运算方式就可以解决这个问题,由于问题规模较小,一般我们手写几个嵌套循环就能完成枚举,但是自己还是尝试一般化了这里的穷举逻辑,于是有了第二点感悟:
编码过程中还出现了不少之前没有预料到的问题:
没想小小一个游戏,却能折射出这么多软件工程的问题,这里有了第三点感悟:
最后让我们来做做脑部体操,自己来算个24点吧:
11 3 12 5
(什么?算不出24点?那就自己编个程序帮你算吧~)