24點組合計算問題

問題描述

給出任意個整數,尋找其可能的組合,使其四則運算結果值爲24點

解決方案

使用分治思想,每次取兩個數字運算,將其結果替換數集中已使用的操作數,直到融合爲一個計算式,判斷其是否符合條件
該問題解決過程用到了窮舉法,如果結果不唯一,則會輸出所有可能結果

nums = ['3', '3', '7', '7']
opts = ['({}+{})', '({}-{})', '{}*{}', '{}/{}']
rsts = set()

def calc(nums):
    count = len(nums)
    if count == 1:
        try:
            if eval(nums[0]) == 24:
                rsts.add('{} = 24'.format(nums[0]))
        finally:
            return
    for i in range(count):
        for j in range(count):
            if i == j:
                continue
            for opt in opts:
                nums_n = [nums[x] for x in range(len(nums)) if x not in (i, j)]
                opt_str = opt.format(nums[i], nums[j])
                nums_n.append(opt_str)
                calc(nums_n)

calc(nums)
for rst in rsts:
    print(rst)

輸出結果爲:

(3+3/7)*7 = 24
7*(3/7+3) = 24
(3/7+3)*7 = 24
7*(3+3/7) = 24
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章