問題描述
給出任意個整數,尋找其可能的組合,使其四則運算結果值爲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