1. 程式人生 > >找出m個總和為n的數字

找出m個總和為n的數字

上週末公司組織去旅遊,在路上一個同事提出了一個小問題,就是怎麼找出三個數,使它們的和為13。後來又引申為如何找出m個數,使它們的和為n。下面是使用遞迴的方法來實現:
import sys

def test( nBlock, nTotal, nBegin=1):
    
if nBlock <=1:
        
return [[nTotal]]
    a 
= []
    
for i in range(nBegin, nTotal/nBlock+1):
        a.extend( [k
+[i] for k in test(nBlock-1, nTotal-i, i)] )
    
return a

if__name__=='__main__':
    
if len(sys.argv) ==3:
        
print test(int(sys.argv[
1]), int(sys.argv[2]))

其中nBlock為個數,nTotal為總和,nBegin為所需要找的nBlock個數的數字的下限值。
基本思路:先確定第一個數為a,然後再找出nBlock-1個數使它們的和為nTotal-a.