试着自己写了个24点游戏,如有改进或者不对的地方请指出。

基本知识:

游戏规则很简单,就是利用加减乘除将扑克牌的任一4张牌的组合,运算后得到结果24.

界面用Qt完成后

clip_image002

clip_image004

界面没有多下功夫,可以添加时间提醒,修改目标数值(24),增加牌数应该也是可以的,不过我没有去试一下。感觉花哨了没有简单来的好一些。

next会生成新的牌。answer查看答案。

牌的数值使用QlineEdit做的,可以自己设置值。

CardCalculation类会根据输入的牌数(vector<double>)计算出响应的表达式。

计算流程:

数据结构的书还没看完,算法完全是自己凭空去试。最后写出来后其实也不知道自己再考虑这方便问题时思路怎么展开。尽快抽时间看下算法的书才行。

我们拿※作为任意的操作符(+-*/)来说明。

根据vec元素个数:

1. a※b,直接计算即可。

2. a※b※c,可能操作为:

(a※b)※c

a※(b※c)

3. a※b※c ※d,可能操作为:

(a※b)※c ※d

a※(b※c) ※d

a※b※(c ※d)

因此采用递归求解,好处是如果增加牌的张数时应该容易修改一些,具体实现函数为calCards。

刚传进vec时,大小为4,属于第三种情况。遍历vec,将可能操作后形成的新的vector再次作为函数参数传入,直到遇到1情况返回,如果满足返回true,否则返回false。返回true时,修改第二个参数保存表达式。

关于如何返回表达式这里我弄了很长时间。计算出正确的表达式后,每次递归都会加一对括号,其实后面应该可以对表达式优化下可能减少括号的数量,不过我没有写。

程序里都写了注释~如果还是有问题请给我留言J /Files/izualzhy/TwentyFourGame.rar