python解決組合問題

2022-09-15 09:33:12 字數 1997 閱讀 1497

比如9個數中取4個數的組合以及列出各種組合,該如何做?

固定:1   2  3  ,組合有1234 1235 1236 

固定1 2 4,組合有:1245 1246

def

combnumberloop4(m, b):

totalnumber =0

for i in range(1, m+2-4):

b[0] =i

for j in range(i+1, m+2-3):

b[1] =j

for k in range(j+1, m+2-2):

b[2] =k

for l in range(k+1, m+2-1):

b[3] =l

print

b totalnumber += 1

return

totalnumber

group=[99,99,99,99]

print

"\nusing loop: %d\n

" % combnumberloop4(6, group)

程式的輸出結果,正如之前分析的那樣。

我們再回到c(6,4)問題,除了上面列出的十個步驟,我們換個思路:

如果在6個數中選定乙個數,那麼確定剩下的3個數是不是變為了「從5個數中選3個數的組合問題」了呢?以此類推,這似乎變成了乙個「遞迴」問題了,確實,我們可以用遞迴的思路來解決這個問題。

對於c(m, n)列出所有組合的問題,可以按照一下的步驟來進行程式設計,這次我們按從後往前的順序來列出所有組合:

注意,設計遞迴函式一定要有終止條件,否則會造成「死迴圈」。

實現的**如下:

def

combnumber(m, n, b):

global

totalnumberr

for i in range(m, n-1, -1):

b[n-1] =i

if n-1>0:

combnumber(i-1,n-1,b)

else

:

print

b totalnumberr += 1

return

totalnumberr

group=[99,99,99,99,99]

totalnumberr =0

print

"\nusing recursive: %d\n

" % combnumber(7,5,group)

遞迴的使用,讓程式寫起來非常的簡潔,但是,在寫程式的時候,我有兩個地方(其實程式也就難在這兩個地方),折騰了好幾天才弄清楚:

FFT解決組合數問題

有k種元素,均有無窮多個,規定第i種元素選取的個數ci必須屬於乙個特定的集合si,當需要選取r個元素時,有多少種選取方式?exp 有蘋果,香蕉和桃子3種水果,如果蘋果只能選不超過3個,選香蕉的個數必須是5的倍數,而桃子的個數必須是素數,問選r個水果有幾種方法。solution 解決方法是把每個集合寫...

非遞迴解決組合問題

從m 個互不相同元素中取 n 個元素,一般選用遞迴或回溯演算法解決,本文旨在利用進製轉換的方法達到這一目的。如下 sub getall byval num as integer,byref x as variant,byref result as string,optional byref all ...

用DFS解決組合問題

一直以來,大量做各類管理系統的程式設計師,大量的時間都在處理各類增刪改查問題,對於其他的方面尤其是演算法層面的涉及較少,這次就遇到乙個問題。使用者上傳乙份excel,讓使用者選擇其中的部分列頭,程式對列頭做兩兩組合,並對所有的組合取excel表中的資料,繪製乙個折線圖。檔案上傳。前端使用非同步外掛程...