java实现24点算法
来源:互联网 发布:网页注入js代码 编辑:程序博客网 时间:2024/06/08 10:47
题目: 随机给4个数,对其进行加减乘除运算,最终值为24,最终打印数学表达式。
思路:穷举4个整数的所有可能表达式,然后对表达式求值。
表达式求值: exp=(exp|num) operator (exp|num)
细节:
因为4种运算 + - * / 都是二元运算,二元运算符接收两个参数,输出计算结果,并参与后续计算。
四个整数,每次选择两个数字,一共有C(4,2)中排列方式。 对每一个排列都进行一次四则运算。
输出的时候需要考虑 用 () 来表示优先级。
import java.util.ArrayList;import java.util.Scanner;/** * @author LilyLee * @date 2017年4月27日 * @time 上午10:48:53 * @Version 1.0 * @email lilylee_1213@foxmail.com * */public class Sum24 {public static void main(String[] args) {// TODO Auto-generated method stubExperssion exp= new Experssion();Thinker ti=new Thinker(exp);ArrayList<Integer> card=new ArrayList<Integer>();int sum=24;Scanner sc=new Scanner(System.in);int t;for(int i=0;i<4;i++){t=sc.nextInt();card.add(t);}ti.count(card,card.size()-1,sum);}}class Experssion{private ArrayList<Integer>num=new ArrayList<Integer>();private ArrayList<String> sign=new ArrayList<String>();public void add(int n){num.add(n);}public void add(String s){sign.add(s);}private int getPriority(String s){if(sign.equals("+")) return 1;if(sign.equals("-")) return 1;if(sign.equals("*")) return 2;if(sign.equals("/")) return 2;return -1;}private String toString(int la){if(la==0){return num.get(0)+sign.get(0)+num.get(1);}else{String result=this.toString(la-1);if(getPriority(sign.get(la))>=getPriority(sign.get(la-1)))result="("+result+")";result+=sign.get(la)+num.get(la+1);return result;}}public String toString(){return toString(2);}public void clear(){num.clear();sign.clear();}}class Thinker{private Experssion exp;public Thinker(Experssion expp){exp=expp;}public boolean count(ArrayList<Integer>array,int num, int target){if(num==1){if(array.get(0)+array.get(1)==target){exp.add(array.get(0));exp.add(array.get(1));exp.add("+");return true;}if(array.get(0)-array.get(1)==target){exp.add(array.get(0));exp.add(array.get(1));exp.add("-");return true;}if(array.get(1)-array.get(0)==target){exp.add(array.get(1));exp.add(array.get(0));exp.add("-");return true;}if(array.get(0)*array.get(1)==target){exp.add(array.get(1));exp.add(array.get(0));exp.add("*");return true;}if(array.get(0)*target==array.get(1)){exp.add(array.get(0));exp.add(array.get(1));exp.add("/");return true;}if(array.get(1)*target==array.get(0)){exp.add(array.get(1));exp.add(array.get(0));exp.add("/");return true;}return false;}else{for(int current=0;current<array.size();current++){ArrayList<Integer>array1=new ArrayList<Integer>();int currentNum=array.get(current);for(int i=0;i<array.size();i++){if(i!=current){array1.add(array.get(i));}}if(count(array1,num-1,target-currentNum)){exp.add("+");exp.add(currentNum);if(num==3){System.out.println(exp.toString());exp.clear();}if(num!=3) return true;}if(count(array1,num-1,target+currentNum)){exp.add("-");exp.add(currentNum);if(num==3){System.out.println(exp.toString());exp.clear();}if(num!=3) return true;}if(count(array1,num-1,target*currentNum)){exp.add("/");exp.add(currentNum);if(num==3){System.out.println(exp.toString());exp.clear();}if(num!=3) return true;}if(target%currentNum==0){if(count(array1,num-1,(int)(target/currentNum))){exp.add("*");exp.add(currentNum);if(num==3){System.out.println(exp.toString());exp.clear();}if(num!=3) return true;}}}return false;}}}
2 0
- java实现24点算法
- 24点算法详解--Java代码实现
- 24点算法实现
- 扑克牌计算24点的Java算法实现
- C++实现24点算法
- 用c#实现24点算法
- 24点游戏的算法实现
- C++实现24点游戏算法
- 平面上点对的最小距离算法-java实现
- 24点算法的java代码
- java经典24点算法代码
- Java 实现的24点牌
- 24点破解的Java实现
- 24点破解的Java实现
- 24点破解的Java实现
- 扑克牌24点游戏JAVA实现
- Java实现 扑克24点游戏src
- Java实现24点纸牌游戏
- 关于数学中的范数
- 《直播疑难杂症排查》之二:播放卡顿
- 什么是医院随访系统
- 模拟线性队列
- LoadRunner使用
- java实现24点算法
- Matplotlib 作图中文无法显示
- linux下搭建python环境
- Oracle表空间的创建与监控(持续更新)
- 软件系统性能优化策略--SQL优化
- vs 中opencv vector析构问题
- 关于event.keyCode值用String.fromCharCode转换后,小数点变成了奇怪的字符!!
- linux下的shell 快捷键
- mvn package方法打包注入依赖解决方法