找出m个总和为n的数字

来源:互联网 发布:lua 5.3 windows 安装 编辑:程序博客网 时间:2024/06/01 08:54
上周末公司组织去旅游,在路上一个同事提出了一个小问题,就是怎么找出三个数,使它们的和为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.
原创粉丝点击