`
mozhenghua
  • 浏览: 324522 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 24点算法实现

 
阅读更多

折腾了一个中午写了一个24点的算法,试验了一下效果还不错,这个算法没有啥技巧也就是把全部的可能性给算一遍,代码如下:

/**
 * @author 百岁(baisui@taobao.com)
 * @date 2013-3-27
 */
public class Test24 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 需要计算的24点的四个值放置在一个数组中
		int[] param = new int[] { 2, 6, 5, 10 };

		for (int i = 0; i < param.length; i++) {
			for (int j = 0; j < param.length; j++) {
				if (i == j) {
					continue;
				}
				// System.out.println("i:" + param[i] + ",j:" + param[j]);

				for (Comput opr : computAry) {

					int degree2 = opr.comput(param[i], param[j]);

					for (int k = 0; k < param.length; k++) {

						Set<Integer> all = new HashSet<Integer>();
						all.add(i);
						all.add(j);
						all.add(k);
						if (all.size() < 3) {
							continue;
						}

						for (Comput opr2 : computAry) {
							int degree3 = opr2.comput(degree2, param[k]);
							for (int m = 0; m < param.length; m++) {

								all = new HashSet<Integer>();
								all.add(i);
								all.add(j);
								all.add(k);
								all.add(m);

								if (all.size() < 4) {
									continue;
								}

								for (Comput opr3 : computAry) {

									if (opr3.comput(degree3, param[m]) == 24) {
										// System.out.println("i:" + param[i]
										// + ",j:" + param[j] + ",k="
										// + param[k] + ",m=" + param[m]);

										System.out.println("" + param[i]
												+ opr.getSymbol() + param[j]
												+ opr2.getSymbol() + param[k]
												+ opr3.getSymbol() + param[m]);
									}
								}
							}
						}
					}
				}

			}
		}
	}

	static abstract class Comput {

		abstract int comput(int a, int b);

		abstract char getSymbol();
	}

	static class Plus extends Comput {

		@Override
		int comput(int a, int b) {
			return a + b;
		}

		@Override
		char getSymbol() {
			return '+';
		}
	}

	static class Subtraction extends Comput {

		@Override
		int comput(int a, int b) {
			return a - b;
		}

		@Override
		char getSymbol() {
			return '-';
		}
	}

	static class Times extends Comput {

		@Override
		int comput(int a, int b) {
			return a * b;
		}

		@Override
		char getSymbol() {
			return '*';
		}
	}

	static class Division extends Comput {
		@Override
		int comput(int a, int b) {
			return 0;
		}

		@Override
		char getSymbol() {
			return '/';
		}
	}

	final static Comput[] computAry = new Comput[] { new Plus(),
			new Subtraction(), new Times(), new Division() };

}

 

分享到:
评论

相关推荐

    java国密算法实现

    总的来说,Java国密算法实现涉及了椭圆曲线加密和哈希函数两大核心概念,通过合理运用这些算法,可以构建安全可靠的加密通信和数据保护系统。在具体编程时,需要对算法原理有深入理解,并熟练掌握相关库的使用,以...

    几个推荐算法的java实现

    本项目提供了一些推荐算法的Java实现,包括slopeone、SVD(奇异值分解)以及基于物品邻接的SVD(ItemNeighborSVD)。下面我们将详细探讨这些算法及其在Java中的实现。 1. **slopeone**: - Slope One是一种简单的...

    java mrp算法实现

    【Java MRP算法实现】是基于Java编程语言构建的一个现代物料需求计划(Material Requirements Planning,简称MRP)系统。MRP系统是企业资源规划(ERP)的重要组成部分,它主要用于优化企业的生产计划,确保在正确的...

    Java排序算法实现

    Java排序算法实现 Java排序算法实现 Java排序算法实现

    Java实现随机森林算法

    在Java中实现随机森林算法通常需要使用机器学习库,比如Weka或者Apache Spark的MLlib。下面我将展示一个使用Weka库的简单示例,来说明如何使用随机森林算法对数据进行分类。 首先,你需要在项目中引入Weka库。如果...

    KrigingCore_java_克里金插值算法实现_克里金算法_

    在给定的Java项目“KrigingCore_java_克里金插值算法实现”中,开发者提供了一个开源的实现,让我们深入探讨一下克里金插值的基本原理和这个Java实现的关键部分。 **1. 克里金插值原理** 克里金插值由南非矿业...

    DBSCAN聚类算法java实现

    java版的DBSCAN聚类算法实现,是典型的算法思路实现,遍历未访问的所有点,如果是核心点,就新建一个簇,然后遍历其邻域内的所有点集A,不断扩展,如果簇内的点时核心点,就将其邻域所有点纳入点集A,并从点集移除已...

    Java实现kNN算法

    Java实现k近邻(kNN)算法是机器学习领域中一种基础且重要的算法,主要用于分类和回归问题。kNN算法基于实例的学习,它不预先建立任何模型,而是将新数据分类或预测为与其最近的k个训练样本中最常见的类别。在这个讨论...

    JAVA实现扫描线算法(超详细)

    JAVA实现扫描线算法的知识点总结 扫描线算法是计算机图形学中的一种常用算法,用于实现多边形的扫描线填充。下面是JAVA实现扫描线算法的知识点总结: 1. 扫描线算法的基本概念: 扫描线算法是从Ymin开始扫描,...

    祖冲之密码算法Java实现

    9. **性能优化**:虽然祖冲之算法本身已经设计得很高效,但在Java中实现时,仍需要注意内存管理和计算性能,以适应可能的大规模数据加密需求。 10. **文档编写**:为了方便其他开发者理解和使用你的实现,需要编写...

    java实现FCM聚类算法

    java实现FCM聚类算法java实现FCM聚类算法java实现FCM聚类算法java实现FCM聚类算法

    java实现银行家算法代码

    用java实现银行家调度算法,避免进程死锁!

    基于java实现的des算法

    基于Java实现的DES算法 作为一个IT行业大师,我将从给定的文件中生成相关知识点。 标题:基于Java实现的DES算法 在这个标题中,我们可以看到这个Java程序的主要功能是实现DES(Data Encryption Standard)算法。...

    1204 Java 遗传算法排课java sqlserver.rar_java排课算法_排课_排课系统java_遗传算法Java

    5. **排课算法实现**:遗传算法的实现通常包括初始化种群(随机生成初始的课程安排)、计算适应度(根据满足约束的程度评价解的好坏)、选择操作(依据适应度保留优秀解)、交叉操作(交换两个解的部分信息生成新解...

    BP算法的java实现

    BP算法的JAVA实现,BP神经网络的数学原理及其算法实现,实验使用IRIS数据集,BP神经网络,BP即Back Propagation的缩写,也就是反向传播的意思,顾名思义,将什么反向传播?文中将会解答。不仅如此,关于隐层的含义...

    JAVA 抽奖算法,JAVA 抽奖算法·

    4. **算法实现**:算法的核心逻辑在`interact`方法中实现。首先通过缩放概率使其转换为整数形式;然后计算每个奖品的累积概率;最后生成随机数并与累积概率进行比较,从而得出最终的抽奖结果。 #### 实现细节 - **...

    JAVA实现FFT算法

    java实现FFT算法,关于快速傅里叶变换(FFT)和傅里叶变换的理论知识这里我就不提了,本文主要讲解FFT实现: 之前想找一个FFT代码,在网上找了很多都是有问题的,下面我完善了一个供大家学习交流;

    FP树增长算法的java实现

    在Java中实现FP树算法,我们可以按照以下步骤进行: 1. **数据预处理**:首先,我们需要对原始数据进行预处理,将交易数据转换为事务ID和项ID的形式,即每条记录表示一个交易,其中包含交易中出现的所有项。 2. **...

    JAVA实现的A*算法

    利用JAVA语言编程实现的经典A*算法,复制到eclipse即可运行

    Apriori算法 java实现

    `apriori.java`是Apriori算法的Java实现文件。这个文件可能包含了以下关键部分: 1. 数据预处理:从Excel文件中读取数据,转换成项集(如商品列表)。 2. 支持度计算:定义一个函数来计算项集的支持度,这是评估项集...

Global site tag (gtag.js) - Google Analytics