`

24Point

 
阅读更多
import java.util.HashSet;

public class Game24Point {
	private static int n = 4;
	private static int size = (int) Math.pow(2, n);
	private static HashSet<Double>[] S = new HashSet[size];
	private static double[] array = { 5, 5, 5, 1 };
	private static double targetNum = 576;

	private static boolean useFactorial = true;

	private static void init() {
		for (int i = 0; i < size; i++) {
			S[i] = null;
		}
		for (int i = 0; i < n; i++) {
			int temp = (int) Math.pow(2, i);
			S[temp] = new HashSet<Double>();
			S[temp].add(array[i]);
			if (useFactorial) {
				S[temp].add(new Double(factorial((int) array[i])));
			}
		}
		for (int i = 0; i < size; i++) {
			S[i] = f(i);
		}
		Check(S[(int) Math.pow(2, n) - 1]);
	}

	private static void Check(HashSet<Double> arrayList) {
		for (Double temp : arrayList) {
			if (Math.abs(temp - targetNum) < 1E-6) {
				System.out.println("Succeed");
			}
		}

	}

	private static HashSet<Double> f(int i) {
		if (S[i] != null) {
			return S[i];
		}
		S[i] = new HashSet<Double>();
		for (int x = 1; x < i; x++) {
			if ((x & i) == x) {
				for (Double temp : Fork(f(x), f(i - x))) {
					S[i].add(temp);
					// if (useFactorial) {
					// if (Math.abs(temp - (int) temp.doubleValue()) < 1E-6
					// && temp > 0) {
					// S[i].add(new Double(factorial((int) temp
					// .doubleValue())));
					// }
					// }
				}
			}
		}
		return S[i];
	}

	private static HashSet<Double> Fork(HashSet<Double> hashSet,
			HashSet<Double> hashSet2) {
		HashSet<Double> ret = new HashSet<Double>();
		for (Double a : hashSet) {
			for (Double b : hashSet2) {
				ret.add(a + b);
				ret.add(a - b);
				ret.add(b - a);
				ret.add(a * b);
				if (b != 0) {
					ret.add(a / b);
				}
				if (a != 0) {
					ret.add(b / a);
				}
			}
		}
		return ret;
	}

	private static int factorial(int x) {
		if (x < 0) {
			throw new IllegalArgumentException("x must be>=0");
		}
		int fact = 1;
		for (int i = 2; i <= x; i++) {
			fact *= i;
		}
		return fact;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		init();

	}

}
分享到:
评论

相关推荐

    24point 24点程序 源码 vc

    【标题】"24point 24点程序 源码 vc" 描述了一款基于VC++开发的24点游戏源代码。24点游戏是一种流行的心算游戏,目标是通过加减乘除运算,使得四张扑克牌的点数(1到13代表数字1到13)运算结果等于24。这款游戏程序...

    C语言24point游戏源码和程序说明.rar

    首先,我们关注的是源码文件"24point.C"。这个文件通常包含了游戏的主要逻辑和函数实现。在C语言中,源码文件一般包含头文件导入、全局变量声明、函数定义以及主函数main()。24点游戏的源码可能会包括以下部分: 1....

    24point-game-for-C-.rar_计算器

    在这个"24point-game-for-C-.rar_计算器"压缩包中,包含了一个用C语言实现的24点游戏算法,以及一个名为"gutr.txt"的文本文件,可能是程序的说明或源代码的一部分。 C语言是一种广泛应用的编程语言,具有高效、灵活...

    24point.cpp

    用C语言编写的300行左右的简易的24点小游戏,可以用来练习C语言的使用

    24point.py

    解决24点计算问题,1积分,穷,想攒点积分

    24point-game-for-C-.zip_计算器

    24点游戏是一款基于纸牌的数学游戏,目标是通过加、减、乘、除四种基本运算,使得四张牌的数值最终得出24。在这个案例中,我们关注的是使用C语言实现24点游戏的算法,同时也适用于计算器的运算核心部分。 在C语言中...

    24point.rar_游戏_Java_

    标题中的“24point.rar”很可能是一个Java编程项目,它是一个关于21点游戏的实现。21点,又称Blackjack,是一种广受欢迎的纸牌游戏,目标是获得的卡面总点数接近21点但不超过21点。在这个项目中,开发者使用Java编程...

    24POINT.rar_对话框与窗口_Visual_C++_

    本项目"24POINT.rar_对话框与窗口_Visual_C++_"显然是一个使用MFC实现的24点游戏自动计算程序。下面我们将深入探讨这个项目涉及的关键知识点。 首先,我们要理解什么是对话框和窗口。在图形用户界面(GUI)中,...

    calculate24.zip

    《探究C#实现扑克牌速算24游戏的算法与设计》 在计算机科学领域,尤其是在编程和游戏设计中,扑克牌速算24游戏是一个经典的挑战。它要求玩家从13张扑克牌中选取4张,通过加、减、乘、除运算,使结果等于24。本篇...

    point24--24点游戏

    C++课程设计作业。运用了MFC可视化技术,做了一个24点游戏,界面比较美观。

    POINT I/O 24V dc Expansion Power Supply.pdf

    POINT I/O 24V dc Expansion Power Supply文档主要介绍了 POINT I/O 系列的24伏直流扩展电源供应器。这个电源供应器的设计目的是为了在工业自动化中,为POINT I/O模块提供额外的24伏直流电源。文档中涉及了安装指令...

    PointNet++ 源码有批注

    PointNet++是深度学习领域中处理三维点云数据的一种创新性网络架构,由斯坦福大学的研究团队在2017年提出。它扩展了原始的PointNet(PointNet1),在处理非结构化3D数据时增加了对局部结构的感知能力。在本压缩包中...

    24点游戏插件for leadbbs3.14

    而"24point"和"24点插件"这两个文件或文件夹可能包含了游戏的具体实现代码和资源。 在论坛上集成24点游戏插件后,用户可以方便地参与游戏,激发他们的数学兴趣。管理员可以通过设置来调整游戏的难度和参与规则,...

    自己写的算24点的小程序

    如果是源代码,可能包含主程序文件(如24point.c或24point.cpp)、头文件(定义函数和数据结构)、资源文件(如图标、菜单定义等)。如果提供的是可执行文件,则是编译后的程序,可以直接运行在Windows环境中。 ...

    流真岁月24点游戏插件.rar

    在部署方面,用户只需将`24point.asp`文件和同名文件夹上传到网站的根目录,确保服务器支持ASP运行环境。通过提供的演示地址,我们可以看到游戏的实际效果和操作流程,这表明开发者已经成功地将后端计算与前端展示...

    24点计算器vb&vc++

    在提供的文件名列表中,"2005022014355931749"和"yuda24Point"可能是两个项目的版本号或编码日期,或者是特定资源的标识。它们暗示着作者可能在不同时间或版本上进行了修改或优化,但没有具体的信息无法进一步分析。...

    MFC实现24点算法,我的课程设计

    void calculate24Point() { // 用户输入或随机生成四个数字 std::vector&lt;int&gt; numbers = {num1, num2, num3, num4}; std::stack(int, int)&gt;&gt; operations; // 添加基本的运算符到栈 operations.push(std::plus()...

    C++24点扑克牌游戏(含源码).docx

    代码中定义了一个`game24point`类,包含一个构造函数,用于读取输入文件中的数据并将扑克牌的字符表示转换为对应的数值。`calcute()`函数接收两个数字和一个运算符,根据运算符返回计算结果。`search()`函数是核心,...

    c语言24点游戏源码.zip

    【压缩包子文件的文件名称列表】只有一个文件名"c语言24点游戏源码",这通常意味着源代码文件可能以.c为扩展名,如"24point_game.c",它包含了实现24点游戏算法的所有C语言代码。 详细知识点: 1. **C语言基础**:...

    24点计算游戏答案(任意数)

    至于提供的可执行文件"24Point.exe",这可能是一个软件工具,用于帮助玩家快速验证自己的解法或者提供游戏自动化的过程。这样的工具可以节省计算时间,但同时也可能削弱玩家的思考过程。使用这类工具时,应注意其...

Global site tag (gtag.js) - Google Analytics