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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值