Swift暴力求解 4个数字n1, n2, n3, n4对应24种排列组合; 4个字符对应24种排列组合,外加4种都是同一个符号的组合,共28种组合; 遍历这24种组合顺序的数字与28种组合的符号,进行计算直接求解。

while let str = readLine() {
    if str.lowercased().contains("joker") {
        print("ERROR")
    } else {
        let array = str.components(separatedBy: " ")
        let map = ["A": 1, "2": 2, "3": 3, "4" : 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "10": 10, "J": 11, "Q": 12, "K": 13]
        var opsArray = [[String]]()
        opsArray.append(["+", "-", "*", "/"])
        opsArray.append(["+", "-", "/", "*"])
        opsArray.append(["+", "*", "/", "-"])
        opsArray.append(["+", "*", "-", "/"])
        opsArray.append(["+", "/", "-", "*"])
        opsArray.append(["+", "/", "*", "-"])
        opsArray.append(["-", "+", "*", "/"])
        opsArray.append(["-", "+", "/", "*"])
        opsArray.append(["-", "*", "/", "+"])
        opsArray.append(["-", "*", "+", "/"])
        opsArray.append(["-", "/", "+", "*"])
        opsArray.append(["-", "/", "*", "+"])
        opsArray.append(["*", "+", "-", "/"])
        opsArray.append(["*", "+", "/", "-"])
        opsArray.append(["*", "-", "/", "+"])
        opsArray.append(["*", "-", "+", "/"])
        opsArray.append(["*", "/", "+", "-"])
        opsArray.append(["*", "/", "-", "+"])
        opsArray.append(["/", "+", "-", "*"])
        opsArray.append(["/", "+", "*", "-"])
        opsArray.append(["/", "-", "*", "+"])
        opsArray.append(["/", "-", "+", "*"])
        opsArray.append(["/", "*", "+", "-"])
        opsArray.append(["/", "*", "-", "+"])
        opsArray.append(["+", "+", "+", "+"])
        opsArray.append(["-", "-", "-", "-"])
        opsArray.append(["*", "*", "*", "*"])
        opsArray.append(["/", "/", "/", "/"])
        let nums = array.map{ map[$0]! }.sorted()
        let n1 = nums[0]
        let n2 = nums[1]
        let n3 = nums[2]
        let n4 = nums[3]
        var allNums = [[Int]]()
        allNums.append([n1,n2,n3,n4])
        allNums.append([n1,n2,n4,n3])
        allNums.append([n1,n3,n4,n2])
        allNums.append([n1,n3,n2,n4])
        allNums.append([n1,n4,n2,n3])
        allNums.append([n1,n4,n3,n2])
        allNums.append([n2,n1,n3,n4])
        allNums.append([n2,n1,n4,n3])
        allNums.append([n2,n3,n1,n4])
        allNums.append([n2,n3,n4,n1])
        allNums.append([n2,n4,n1,n3])
        allNums.append([n2,n4,n3,n1])
        allNums.append([n3,n1,n2,n4])
        allNums.append([n3,n1,n4,n2])
        allNums.append([n3,n2,n1,n4])
        allNums.append([n3,n2,n4,n1])
        allNums.append([n3,n4,n1,n2])
        allNums.append([n3,n4,n2,n1])
        allNums.append([n4,n1,n2,n3])
        allNums.append([n4,n1,n3,n2])
        allNums.append([n4,n2,n1,n3])
        allNums.append([n4,n2,n3,n1])
        allNums.append([n4,n3,n2,n1])
        allNums.append([n4,n3,n1,n2])
        var exist = false
        for array in allNums {
            for ops in opsArray {
                let result = handle(array, ops)
                if result == 24 {
                    exist = true
                    break
                }
            }
            if exist {
                break
            }
        }
        if !exist {
            print("NONE")
        }
    }
}

func handle(_ nums: [Int], _ ops: [String]) -> Int {
    let n1 = nums[0]
    let n2 = nums[1]
    let n3 = nums[2]
    let n4 = nums[3]
    let op1 = ops[0]
    let op2 = ops[1]
    let op3 = ops[2]
    var result = calc(n1, n2, op: op1)
    result = calc(result, n3, op: op2)
    result = calc(result, n4, op: op3)
    if result == 24 {
        let map = [1 : "A", 2 : "2", 3 : "3", 4 : "4", 5 : "5", 6: "6", 7 : "7", 8 : "8", 9 : "9", 10: "10", 11: "J", 12 : "Q", 13 : "K"]
        let m1 = map[n1]!
        let m2 = map[n2]!
        let m3 = map[n3]!
        let m4 = map[n4]!
        let express = m1 + op1 + m2 + op2 + m3 + op3 + m4
        print(express)
    }
    return result
}

func calc(_ n1: Int, _ n2: Int, op: String) -> Int {
    if op == "+" {
        return n1 + n2
    } else if op == "-" {
        return n1 - n2
    } else if op == "*" {
        return n1 * n2
    } else {
        return n1 / n2
    }
}