查找并打印总和为 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 之间数字的所有此类组合的计数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何返回所有具有 N 总和的唯一数字组合 [重复]

2022-02-04:组合总和 Ⅳ。 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证

逐对序列分析-查找唯一组合的索引

C ++ - 查找唯一元素的总和[重复]

具有唯一值的列的 SQL 总和量

创建 2、3 或 4 列的每个唯一组合的总和