码迷,mamicode.com
首页 > 其他好文 > 详细

1到9连续运算求和100

时间:2017-08-01 19:22:09      阅读:149      评论:0      收藏:0      [点我收藏+]

标签: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。技术分享

 

1到9连续运算求和100

标签:manager   div   添加   int   manage   on()   append   接下来   class   

原文地址:http://www.cnblogs.com/xufan/p/7269668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!