zoukankan      html  css  js  c++  java
  • 1到9连续运算求和100

    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。

  • 相关阅读:
    [置顶] cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台
    15 个 Docker 技巧和提示
    Docker资源管理探秘:Docker背后的内核Cgroups机制
    SVN通过域名连不上服务器地址(svn: E175002: OPTIONS request failed on '/svn/yx-SVN-Server' Connection refused: connect)
    图片点击放大功能
    jquery-选择checkbox的多种策略
    HTML-input标签需设置的属性
    MyBatis-配置缓存
    SpringMVC redirect乱码问题
    Mysql-左连接查询条件失效的解决办法
  • 原文地址:https://www.cnblogs.com/xufan/p/7269668.html
Copyright © 2011-2022 走看看