标签:manager div 添加 int manage on() append 接下来 class
Java实现1到9连续运算的结果值为100
在实现过程中,主要涉及到两个知识点:一是递归算法的运用;二是调用JavaScript引擎实现字符串的数学运算。在编码之前,首先需要定义三个数组
- 对于最终拼接字符串数组的定义,在1到9之间添加空元素
- 把对应空元素的下标建立对应的数组
- 运算符数组
public class SumOneHundred { public static String[] base = new String[] { "1", "", "2", "", "3", "", "4", "", "5", "", "6", "", "7", "", "8", "", "9" }; public static int[] index = new int[] { 1, 3, 5, 7, 9, 11, 13, 15 }; public static String[] operationSymbol = new String[] { "+", "-", "*", "/","" }; public static ScriptEngine se = new ScriptEngineManager().getEngineByName("JavaScript"); public static int num = 0; public static void main(String[] args) throws ScriptException { operation(); } public static void operation() throws ScriptException { for (int j = 0; j < operationSymbol.length; j++) { base[index[num]] = operationSymbol[j]; if(num < index.length-1){ num++; operation(); }else{ StringBuffer sb = new StringBuffer(); for(int i = 0; i < base.length; i++){ sb.append(base[i]); } Double eval = (Double) se.eval(sb.toString()); if(eval == 100.0){ System.out.println(sb.toString()); } } } num--; //在循环执行完一个运算符赋值流程后,对下标值进行移位 } }
该问题的本质:在1到9之间通过添加不同的运算符,获取最终运算结果为100的表达式。由排列组合的原理,可以得出总共有65536(4^8)种情况,最终的结果也是从中进行筛选。那么接下来的问题就是如何取得所有的排列组合?对于这种层级场景,首先想到的就是通过递归进行实现:递归函数内部实现运算符的循环赋值,递归函数之间实现层级关系(空元素的下标对应的数组的循环)。
在递归函数内部,最重要的一步操作是num--,每执行完一次运算符循环赋值,则往上升一级,完成所有的排列组合。通过判断num值的大小确定是否循环到最后一个空元素位,进而对字符串进行数学运算,判断结果是否为100。
标签:manager div 添加 int manage on() append 接下来 class
原文地址:http://www.cnblogs.com/xufan/p/7269668.html