3

数値の範囲: 1 ~ 100

合計が 100 に等しい 1 から 100までのすべての一意の組み合わせを出力し、最後にそのような組み合わせの数を出力したいと考えています。例:

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

したがって、次の 2 つのものが必要です。

  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 に答える