找出m个总和为n的数字
来源:互联网 发布:lua 5.3 windows 安装 编辑:程序博客网 时间:2024/06/01 08:54
上周末公司组织去旅游,在路上一个同事提出了一个小问题,就是怎么找出三个数,使它们的和为13。后来又引申为如何找出m个数,使它们的和为n。下面是使用递归的方法来实现:
其中nBlock为个数,nTotal为总和,nBegin为所需要找的nBlock个数的数字的下限值。
基本思路:先确定第一个数为a,然后再找出nBlock-1个数使它们的和为nTotal-a.
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]))
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.
- 找出m个总和为n的数字
- 有 n 个无序整数( n>10000), 则找出其中最大的 M 个数字( 5<M<10), 所需要的最小时间复杂度为:
- 输入n,m,从1-n个数字里输出和为m的组合
- n个数里面找出最大的m个数字(快排思想)
- 从长度为N的数组中找出所有M个元素组合的优化算法
- 从长度为M的无序数组中找出N个最大的数
- 将整数m拆分为n个数字的有序拆分方案数为C(m-1,n-1)
- n个骰子的总和
- 一个数字N通过数个固定操作变换为另一个数字M的问题
- 在n个数字中,找出所有和为SUM的组合
- [每日练习]数组有N+M个数字, 数字的范围为1 ... N, 打印重复的元素, 要求O(M + N), 不可以用额外的空间
- 从n个数中找出前m个最大的
- 输入m和n,从1,2,3...n中找出和为m的组合
- 找出n个数字的中位数至少需要的时间
- 03 n个骰子的总和
- n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字
- n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字
- 从 n 个数字中选出 m 个不同的数字,保证这 m 个数字是等概率的
- 如何查出前台正在发出的sql语句?
- 27.2.2 ASP/ASP.NET页面获取客户端证书的方法
- 使用HTTP访问SQLServer
- 27.3 数据签名处理——基于CAPICOM的应用
- 27.3.1 CAPICOM简介
- 找出m个总和为n的数字
- sql
- 27.3.2 CAPICOM对象——Certificate对象
- C#导出分Sheet的Excel文件
- 27.3.3 CAPICOM对象——Certificates对象
- jsp/servlet取参数乱码问题分析
- 27.3.4 CAPICOM对象——CertificateStatus对象
- 警惕 laptop-mode-tools 的 HD_IDLE_TIMEOUT 参数
- 用中值排序基数法实现树状结构