24点

  相信大家都玩过“24点”的游戏,那我就不废话了,直接上图:

  和一般的24点游戏不同的是你可以选择计算其他结果(但它必须在1到52之间),可以选择难度,其实困难的也不一定题目都困难,这只是整体相对而言比较困难。程序还有一个没有完善的地方,那就是没能算出带括号的解。下面我把源代码放出来(其中使用了我上篇博文中利用正则表达式处理四则运算的代码),你可以尝试一下让它更加完善:

 

源代码下载

 

  算法比较简单:先获得4个随机数,然后拼凑成计算式,再利用上篇博文中的计算类算出结果,如果存在结果就加到答案列表,如果最终答案列表有元素就列出题目,这样就不会出现无解的情况了,还有一个算是难点的地方就是去掉重复的答案,因为加减乘除都符合交换率,如果将它们全部列出来那答案列表可能就会很长,那样非常不好。我想到了两种解决方法,消除法和排列法,消除法即首先将两个字符串都分割成字符串数组,遍历找到两个数组中相同的部分,同时消去,若最后都没有元素了,那么就是相同的。另一种方法是只需要分割一个字符串,然后让他全排列,如果其中有一个排列与另一个字符串相同那么说明是相同的,否则全排列都算完了都没有找到相同的那就是不同了。似乎后者更好一些,但是有一个问题,分割字符串之后数组的长度是不确定的,怎么对他全排列呢?想了很久没有想到一个比较好的算法最终还是使用了前者。

  最后我来出一道数学题给大家做:2,4,8,10四个数,使用加减乘除符号连接(不可以使用括号),互不等效(通过交换率能得到的视为等效的)结果为24的4个式子是什么?答案就在本文找^_^!

 

2+4+8+10,4*10-2*8,2*10-4+8,4*8+2-10

 

posted @ 2012-09-04 16:00  Poerin  阅读(644)  评论(0编辑  收藏  举报