`
bk_lin
  • 浏览: 336727 次
社区版块
存档分类
最新评论

24点破解的Java实现

 
阅读更多


一、基本思想


要想计算24点游戏的结果,则必须要采用基于搜索的算法(即穷举法)对每种情况进行遍历,我们怎么样才能遍历所有的情况呢?其实我们只要总结一下,还是有规律可以找的。

输入a、b、c、d,组成a Op1 bOp2 c Op3 d的表达式,其中先算哪个子表达式未知,一共有5种计算方式,如下图所示:


此时如果要实现该程序,需要存储5棵树,为了能够使得存储量达到最小,通过分析,其实总的来说,只需要存储2棵树即可,即:

其他树都是冗余的,因为我们可以通过a、b、c、d的交换,比如((a+(b*c))+d)可以变为(((b*c)+a)+d);
对于每棵树来说,abcd的可能性为4*3*2*1=24;op1op2 op3的可能性为4*4*4=64,因此总个数为1536,而两棵树的总个数为3072。因此只需要穷举这些方法,就可以知道结果。

TfUtils类为实现穷举24点所有可能情况的类,calculate函数用于计算,参数a、b、c、d分别为给定的4个数,而TfUtils类中的expr属性为求解的表达式。


二、代码实现


CalculatorUtils.java


TfUtils.java



测试代码:


输入为:3,3,7,7

输出为:(((3/7)+3)*7)





分享到:
评论

相关推荐

    java开源包4

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    Aspose.Cells for Java 20.7

    Aspose.Cells for Java 提供了丰富的API,使得开发者可以轻松地实现以下功能: 电子表格处理:打开、编辑、保存和转换Excel电子表格。 数据操作:对表格中的数据进行读取、修改、排序和过滤。 公式和函数:支持...

    利用JAVA实现DES加密算法

    DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密...

    java开源包3

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包6

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包9

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包101

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包5

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包8

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包10

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    1分钟java传说心得

    7. **第二十三次**:可能涉及到Java的网络编程,讲解了Socket编程,以及HTTP、HTTPS协议的实现。 8. **第一次**和**第五次**:作为学习的起点和早期阶段,这些文件可能包括了Java环境的配置,开发工具IDE的使用,...

    java和C#通用des3加解密

    2. **Java实现3DES**: - 在Java中,3DES的实现主要依赖`javax.crypto.Cipher`类和`java.security.Key`接口。首先需要创建一个`SecretKeyFactory`实例,然后使用`KeySpec`生成`SecretKey`,最后通过`Cipher`进行...

    java开源包1

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    JAVA上百实例源码以及开源项目源代码

    Java实现的FTP连接与数据浏览程序 1个目标文件 摘要:Java源码,网络相关,FTP Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 ...

    Java资源包01

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    Aspose-pdf-for-java

    Aspose.Pdf for Java 是一个强大的API,专为Java开发者设计,用于处理PDF文档的各种操作,如创建、读取、编辑、转换以及打印PDF文件。这个API提供了丰富的功能,使得在Java项目中与PDF文件交互变得简单高效。 1. ...

    Java中验证码的简单实现

    在Java中实现验证码涉及到图像处理、随机数生成、字体混搭等多个技术领域。下面将详细介绍如何在Java中实现一个简单的验证码系统。 首先,验证码的核心是生成随机字符串。这个字符串通常包含字母和数字,可以是大小...

    Java根据模板动态生成Pdf(添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64)

    6、若对资源有疑问,可以在详见others/《Java生成Pdf文档使用说明.pdf》中的博主个人联系方式中寻求帮助。 1、Demo示例:https://img-blog.csdnimg.cn/b8f771e24f814d718595710f0e3c0d93.png 2、页码示例:...

    java开源包2

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    Desjava实现代码及原理

    DES 加密解密算法的实现指导 DES 加密解密算法是 IBM 在上个世纪 70 年代开发的单密钥对称加解密算法,广泛应用于数据加密和解密领域。该算法利用一个 56+8 奇偶校验位的密钥对以 64 位为单位的块数据进行加解密。...

Global site tag (gtag.js) - Google Analytics