1到9連續運算求和100
阿新 • • 發佈:2017-08-01
過程 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