maplele

踏实的走好自己的每一步

找出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.
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lf8289/article/details/2339977
文章标签: 旅游
个人分类: python
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

找出m个总和为n的数字

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭