转载请注明出处:http://shuiguaiqq.iteye.com/blog/2064339
网上找的那些都看不懂,要么就是不完整,所以自己动手写了下,代码如下:
import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; public class Calculate24 { static List<Node> result = new ArrayList<Node>(); static Set<String> calculateSet = new HashSet<String>(); public static void main(String[] args) { Date now = new Date(); int[] values = {3,3,8,8}; traverse(values); System.out.println("共耗时: "+(System.currentTimeMillis()-now.getTime())+" 毫秒"); } public static void traverse(int[] a){ if(a.length!=4){ System.out.println("不得多于或少于4个数"); return; } Double[] dArrays = new Double[4]; dArrays[0] = a[0]+0D; dArrays[1] = a[1]+0D; dArrays[2] = a[2]+0D; dArrays[3] = a[3]+0D; List<Node> headerList = null; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ if(j==i){ continue; } for(int k=0;k<4;k++){ if(k==i || k==j){ continue; } headerList = createHeaderList(dArrays[i],dArrays[j]); List<Node> chooseThreeNum = null; for(Node t:headerList){ chooseThreeNum = chooseThreeOrFourNum(t, dArrays[k]); List<Node> chooseFourNum = null; for(Node temp:chooseThreeNum ){ chooseFourNum = chooseThreeOrFourNum(temp,dArrays[6-(i+j+k)]); pickNode(chooseFourNum); } } } } } getAllCalculate(); if(calculateSet.size()>0){ display(); } } private static void display(){ System.out.println("共有解:"+calculateSet.size()+"个,具体如下:"); for(String s:calculateSet){ System.out.println(s+" = 24"); } } private static void getAllCalculate(){ if(result.size()<1){ System.out.println("无解"); } Node second = null; Node first = null; for(Node t:result){ second = t.getPre_node(); first = second.getPre_node(); if(second.get_a().doubleValue()==first.getValue().doubleValue()){ second.setA_cul_str(first.getCul_str()); }else{ second.setB_cul_str(first.getCul_str()); } second.doCalculate(); if(t.get_a().doubleValue()==second.getValue().doubleValue()){ t.setA_cul_str(second.getCul_str()); }else{ t.setB_cul_str(second.getCul_str()); } t.doCalculate(); calculateSet.add(filterCalculate(t.getCul_str())); } } private static String filterCalculate(String str){ str = str.substring(1, str.length()-1); str = str.replace(".0", ""); str = str.replace("*", "×"); str = str.replace("/", "÷"); return str; } private static void pickNode(List<Node> list){ for(Node t : list){ if(judge24(t.getValue())){ result.add(t); } } } private static boolean judge24(Double d){ if(Math.abs(d.doubleValue()-24)<=0.000001){ return true; } return false; } private static List<Node> chooseThreeOrFourNum(Node t,Double b){ List<Node> result = new ArrayList<Node>(); Double a = t.getValue(); Node n1 = new Node(a,b,'+'); Node n2 = new Node(a,b,'-'); Node n3 = new Node(a,b,'-',true); Node n4 = new Node(a,b,'*'); Node n5 = new Node(a,b,'/'); Node n6 = new Node(a,b,'/',true); n1.doCalculate(); n2.doCalculate(); n3.doCalculate(); n4.doCalculate(); n5.doCalculate(); n6.doCalculate(); insertNode(n1,result); insertNode(n2,result); insertNode(n3,result); insertNode(n4,result); insertNode(n5,result); insertNode(n6,result); n1.setPre_node(t); n2.setPre_node(t); n3.setPre_node(t); n4.setPre_node(t); n5.setPre_node(t); n6.setPre_node(t); return result; } private static List<Node> createHeaderList(Double a,Double b){ List<Node> result = new ArrayList<Node>(); Node n1 = new Node(a,b,'+'); Node n2 = new Node(a,b,'-'); Node n3 = new Node(a,b,'-',true); Node n4 = new Node(a,b,'*'); Node n5 = new Node(a,b,'/'); Node n6 = new Node(a,b,'/',true); n1.doCalculate(); n2.doCalculate(); n3.doCalculate(); n4.doCalculate(); n5.doCalculate(); n6.doCalculate(); insertNode(n1,result); insertNode(n2,result); insertNode(n3,result); insertNode(n4,result); insertNode(n5,result); insertNode(n6,result); return result; } private static void insertNode(Node p,List<Node> list){ if(p.getValue()!=null){ list.add(p); } } } class Node { Double _a; Double _b; char opr; Double value; boolean is_rev_order; String a_cul_str;//_a的算式 String b_cul_str;//_b的算式 String cul_str;//自身的算式 Node pre_node; Node next_branch1; Node next_branch2; Node next_branch3; Node next_branch4; Node next_branch5; Node next_branch6; public Node(Double a, Double b, char opr) { this._a = a; this._b = b; this.opr = opr; this.a_cul_str = Double.toString(_a); this.b_cul_str = Double.toString(_b); } public Node(Double a, Double b, char opr, boolean is_rev_order) { this._a = a; this._b = b; this.opr = opr; this.is_rev_order = is_rev_order; this.a_cul_str = Double.toString(_a); this.b_cul_str = Double.toString(_b); } public Double getValue(){ return value; } public void doCalculate(){ switch(opr){ case '+': cul_str = "("+a_cul_str+"+"+b_cul_str+")"; value = _a+_b; break; case '-': if(is_rev_order){ cul_str = "("+b_cul_str+"-"+a_cul_str+")"; value = _b-_a; }else{ cul_str = "("+a_cul_str+"-"+b_cul_str+")"; value = _a-_b; } break; case '*': cul_str = "("+a_cul_str+"*"+b_cul_str+")"; value = _a*_b; break; case '/': if(is_rev_order){ if(_a!=0){ cul_str = "("+b_cul_str+"/"+a_cul_str+")"; value = _b/_a; } }else{ if(_b!=0){ cul_str = "("+a_cul_str+"/"+b_cul_str+")"; value = _a/_b; } } break; } } public Double get_a() { return _a; } public void set_a(Double _a) { this._a = _a; } public Double get_b() { return _b; } public void set_b(Double _b) { this._b = _b; } public String getA_cul_str() { return a_cul_str; } public void setA_cul_str(String a_cul_str) { this.a_cul_str = a_cul_str; } public String getB_cul_str() { return b_cul_str; } public void setB_cul_str(String b_cul_str) { this.b_cul_str = b_cul_str; } public String getCul_str() { return cul_str; } public void setCul_str(String cul_str) { this.cul_str = cul_str; } public Node getPre_node() { return pre_node; } public void setPre_node(Node pre_node) { this.pre_node = pre_node; } public Node getNext_branch1() { return next_branch1; } public void setNext_branch1(Node next_branch1) { this.next_branch1 = next_branch1; } public Node getNext_branch2() { return next_branch2; } public void setNext_branch2(Node next_branch2) { this.next_branch2 = next_branch2; } public Node getNext_branch3() { return next_branch3; } public void setNext_branch3(Node next_branch3) { this.next_branch3 = next_branch3; } public Node getNext_branch4() { return next_branch4; } public void setNext_branch4(Node next_branch4) { this.next_branch4 = next_branch4; } public Node getNext_branch5() { return next_branch5; } public void setNext_branch5(Node next_branch5) { this.next_branch5 = next_branch5; } public Node getNext_branch6() { return next_branch6; } public void setNext_branch6(Node next_branch6) { this.next_branch6 = next_branch6; } }
相关推荐
总之,实现Java版的二十四节气计算涉及到对日期处理、天文知识和编程技巧的综合运用。这不仅有助于提升编程能力,还能增进对中国传统文化的理解。通过阅读提供的源码和公式文档,我们可以进一步学习和改进这种实现。
Java 二十四点程序是一款基于图形用户界面(GUI)的应用程序,设计用于解决经典的数学游戏——24点。这个游戏的目标是通过加、减、乘、除四种基本运算,使得四个给定的1到13之间的数字组合的结果恰好等于24。程序的...
既可以实现24点游戏,也可以实现其他数值的游戏
这是我们利用java编写的24点小程序,生成的可执行文件。 为了得到一个24点的小游戏,首先我们需要正确的获取外界的输入,包括他们对数字、符号的选择,以及他们提交答案、获取提示等一系列的操作。其次,我们需要对...
Java 速算24点程序是一种利用编程技术实现的数学游戏,它基于经典的24点游戏规则,通过算法解决给定的四张扑克牌(数字1到9)如何通过加、减、乘、除运算得到24的计算问题。在这个程序中,我们将深入探讨Java编程...
【标题】"24点游戏的Java实现"是关于如何使用Java编程语言设计并实现一个经典数学游戏——24点的程序。这个程序的核心目标是根据四张扑克牌上的数字,通过加减乘除和括号运算,找到使得运算结果为24的计算方法。 ...
24点游戏Java实现,界面Javafx实现,一副牌中抽去大小王剩下 52 张(如果初练也可只用 1~10 这 40 张牌),任意抽取 4 张牌 (称牌组),用加、减、乘、除(可加括号)把牌面上的数算成 24。每张牌必须用一次且只能用 一...
在编程领域,"24点计算"是一个经典的算法问题,主要目标是利用...总的来说,24点计算的Java实现涉及到算法设计、递归、条件判断、数值运算等多个方面的知识,是一个很好的编程实践案例,有助于提升编程能力和逻辑思维。
【标题】"二十四点程序源码(java)"所涉及的知识点主要集中在Java编程语言上,特别是关于算法设计和实现的技巧。24点游戏是一个经典的数学和逻辑思维游戏,玩家需要通过加减乘除四则运算将四张牌的数值组合成24。这...
【速算24游戏Java实现】是一个编程项目,旨在利用Java语言开发...以上就是速算24游戏Java实现涉及的主要技术点,通过这个项目,开发者不仅可以学习到Java的基础知识,还能提升算法设计、软件工程实践和问题解决的能力。
在本Java课程设计中,我们将探讨“速算二十四点”这一趣味性数学游戏的编程实现。这个游戏的目标是从四张包含1到13数字的扑克牌中,通过加、减、乘、除运算,使得结果等于24。在这个项目中,我们将学习如何运用Java...
这是Java开发的24点游戏,游戏能随机显示4位数字,并且有抽取按钮,好像抽奖一样抽取。并且有游戏计时器和游戏计分器。...最主要的帮助按钮,采用了分治递归的算法实现,能够把所有24点组合算出,帮助玩家查看答案!
第二章 系统需求分析 2.1 引言 2.2 游戏需求 2.3基本步骤 2.4基本要求 2.4.1 输入输出要求 2.4.2 设计要求 2.5 软硬件需求 2.6 接口控制 2.7 需求方案论证 第三章 系统概要设计 3.1 程序首页界面设计 3.2 程序...
【算24点】游戏是基于数学和策略的娱乐活动,玩家通常使用四张1-13的扑克牌,通过加、减、乘、除、括号等操作尝试计算出结果为24。在这个Java实现的版本中,我们可以通过源码来深入理解其算法和编程技巧。 首先,...
总结来说,实现Java24点算法的关键在于理解游戏规则,设计合适的递归函数和运算组合策略,并处理好运算顺序。这不仅锻炼了编程能力,也对数学思维和逻辑推理有所提升。通过这样的实践,开发者能够更好地理解和掌握...
【描述】中的“java做的24点小游戏源代码,很好的小东东”意味着这个源代码是一个用Java实现的24点游戏小程序,它可能包含了游戏的基本规则、算法实现以及用户交互界面。开发者或学习者可以通过阅读和分析这段源码来...
网上找了些java实现24点小游戏的算法,看了一下,头都晕了! 自己写了一个类,各位可以看一下思路,如果需要的话,只要实例化PointGame类并在构造方法里传递参与计算的四个数字和需要的结果就好了,然后调用get...
【Java自制24点小游戏】是一款适合初学者练习编程技能的项目,尤其对正在学习Java编程的新人来说,这是一个很好的实战案例。通过实现这个小游戏,开发者可以深入理解面向对象编程、控制流、数学逻辑以及用户交互等...
标题中的“24点程序(没有重复,括号显示完美)”指的是一个使用Java编程语言实现的游戏程序,它能够解决经典的数学游戏——24点。在这个游戏中,玩家需要使用加、减、乘、除四种基本运算,以及括号来重新排列四个...
标题中的“算24点”是指一种数学游戏,玩家需要使用四张扑克牌上的数字,通过加、减、乘、除、括号等运算来得到结果24。在这个上下文中,我们讨论的是一个使用Java编程语言开发的GUI(图形用户界面)程序,它实现了...