給出任意個整數,尋找其可能的組合,使其四則運算結果值為24點
使用分治思想,每次取兩個數字運算,將其結果替換數集中已使用的運算元,直到融合為乙個計算式,判斷其是否符合條件
該問題解決過程用到了窮舉法,如果結果不唯一,則會輸出所有可能結果
輸出結果為:nums =
['3'
,'3'
,'7'
,'7'
]opts =
['({}+{})'
,'({}-{})'
,'{}*{}'
,'{}/{}'
]rsts =
set(
)def
calc
(nums)
: count =
len(nums)
if count ==1:
try:
ifeval
(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]
) calc(nums_n)
calc(nums)
for rst in rsts:
(rst)
(3+3/7)*7 = 24
7*(3/7+3) = 24
(3/7+3)*7 = 24
7*(3+3/7) = 24
POJ 3761 (組合計數)
氣泡排序一輪 相鄰之間的兩個數比較,然後交換。現在給你乙個有序的數列,從 1 n 而且是經過 k 輪交換得來的。問你有多少個這樣的數列。對於乙個數列,我們是有乙個反序表的 ai,反序表中的 ai 表示 i 左邊有多少比 i 要大的數的個數。可以很容易得到反序表 和 原序列是一一對應的。而經過氣泡排序...
組合計數 經典序列問題
1.la 5092 permutation counting 題意 給定 1 sim n 的排列 滿足 a i i 的下標 i 的個數稱為此排列的 e 值,例如 的 e 值為 1 的 e 值為 2 給定整數 n 和 k 1 leq n leq 1000,0 leq k leq n 求 e 值恰好為 ...
APIO2016 組合計數dp 划艇
一邊探索,一邊破壞 巨齒鯊 離散成一些開區間 如果計數題數大區間少可以考慮這個思路,用組合數計數處理區間 用f i j k 表示最後乙個取到i這個學校,取值在第j段的,j段裡已經取了k個的方案數 轉移,考慮前乙個取到的學校 f i j k f i 1 j k f i 1 j k 1 len j k ...