24點組合計算問題

2021-09-11 22:15:49 字數 1161 閱讀 9215

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

print

(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 ...