查找并打印总和为 100 的每个唯一组合,并返回 1 到 100 之间数字的所有此类组合的计数 [重复]
Posted
技术标签:
【中文标题】查找并打印总和为 100 的每个唯一组合,并返回 1 到 100 之间数字的所有此类组合的计数 [重复]【英文标题】:find and print each unique combination that sums to 100 and return a count of all such combinations for numbers between 1 and 100 [duplicate] 【发布时间】:2013-08-05 18:57:01 【问题描述】:数字范围是:1 到 100
我希望打印出介于 1 和 100 之间且总和等于 100 的每个 唯一 组合,最后是此类组合的计数 例如:
[1,99]
[1,2,97]
[1,2,3,4,5,85]
所以,我需要两件事:
-
打印每个有效组合
返回此类组合数的最终计数
这是我迄今为止尝试过的,但没有成功:
count = 0
def get_count(target, data_range, current_sum):
global count
for num in data_range:
current_sum += num
if current_sum > target:
break
elif current_sum == target:
count += 1
current_sum = 0
elif current_sum < target:
get_count(target, range(num + 1, 101), current_sum)
return count
get_count(target = 100, data_range = range(1,101), current_sum = 0)
【问题讨论】:
en.wikipedia.org/wiki/Subset_sum_problem 我同意这是一个完全的骗局。它可以简化为链接的问题,但在这里 - 你有一个额外的限制。给定的数字集是 [1,2,..,100] - 而不是任意集合。 【参考方案1】:此代码不打印组合。
def memoized(f):
cache =
def wrapper(*args):
if args not in cache:
cache[args] = f(*args)
return cache[args]
return wrapper
def get_count(target):
@memoized
def f(target, cur):
if target < 0: return 0
if target == 0: return 1
return sum(f(target - n, n + 1) for n in range(cur, target + 1))
return f(target, 1)
print(get_count(100))
【讨论】:
以上是关于查找并打印总和为 100 的每个唯一组合,并返回 1 到 100 之间数字的所有此类组合的计数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
2022-02-04:组合总和 Ⅳ。 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证