1. 程式人生 > >1到9連續運算求和100

1到9連續運算求和100

過程 spa rgs engine 調用 判斷 移位 接下來 clas

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