「24 點」遊戲規則簡單:給定 4 個整數,各用一次,任意使用 + - * / ( ) 運算,構造表達式使結果等於 24。本文介紹窮舉遞迴演算法,並提供面向過程的 C++ 與面向物件的 Java 兩種實作。
表達式定義為 expression = (expression|number) operator (expression|number),所有運算子皆為二元。演算法步驟:
括號僅影響運算優先順序,演算法中無需顯式處理,輸出時再加入括號即可。
採用雙層迴圈產生兩數排列(j = i+1 利用加法/乘法交換律減少重複),對減法/除法分別計算 a-b、b-a、a/b、b/a。使用 double 陣列存數值,string 陣列同步記錄表達式字串。遞迴函式 Search(n) 中以局部變數備份/還原陣列元素,確保現場一致性。僅輸出第一個找到的解。
設計四大類別:
Number:封裝數值與 toString()。Expression extends Number:含左右運算元與運算子,遞迴定義表達式樹。Calculator:主演算法類,管理數值/表達式陣列、排列生成器 Permutor。Permutor:迭代器風格產生兩元素排列,簡化流程控制。優點:輸出格式調整只需改寫 toString();Permutor 封裝排列邏輯,擴充至三數排列僅修改內部實現;Number/Expression 可復用於表達式解析器等專案。
(5-1/5)*5)。