找出m个总和为n的数字

本文介绍了一种使用递归方法找出特定数量的整数,使得这些整数的和等于给定数值的问题解决方法。具体实现了寻找m个数使它们的和为n的算法,并提供了Python代码示例。
部署运行你感兴趣的模型镜像
上周末公司组织去旅游,在路上一个同事提出了一个小问题,就是怎么找出三个数,使它们的和为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.

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值