從 1~13(A=1)中抽 4 張牌,使用 + - × ÷ 及括號,每張牌用一次,算出 24。
1. ((a ? b) ? c) ? d 2. (a ? (b ? c)) ? d 3. (a ? b) ? (c ? d) 4. a ? ((b ? c) ? d) 5. a ? (b ? (c ? d))
對每種結構,依序計算中間結果,最後判斷 fabs(result - 24) < 1e-6。
// 預先列舉 24 種排列索引
int g_fourlist[24][4] = { {0,1,2,3}, {0,1,3,2}, ... };
// 運算符編碼:0=+, 1=-, 2=*, 3=/
// 建構運算式字串同步輸出
bool _can24(double a, double b, double c, double d, char *expr) {
// 遍歷 5 種結構、64 種運算符組合
// 計算並檢查是否為 24
// 成功時複製運算式到 expr 並返回 true
}
bool Can24(int four[4]) {
// 遍歷 24 種排列呼叫 _can24
}
程式可輸出所有合法運算式,如:2+4+6+12=24、12/(4/(6+2))=24 等。