3

数字范围是:1 到 100

我希望打印出总和等于 100 的 1 到 100 之间的每个唯一组合,最后打印出此类组合的计数例如:

[1,99]
[1,2,97]
[1,2,3,4,5,85]

所以,我需要两件事:

  1. 打印每个有效组合
  2. 返回此类组合数量的最终计数

这是我迄今为止尝试过的但没有成功的方法:

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)
4

1 回答 1

0

此代码不打印组合。

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))
于 2013-08-05T08:03:37.237 回答