2013-08-05 30 views
3

數範圍之間是:1至100找到並打印每一個獨特的組合,總計爲100,並返回所有這些組合的計數數字1和100

我想打印出每獨特組合1到100之間,其總和爲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) 
+0

http://en.wikipedia.org/wiki/Subset_sum_problem – devnull

+1

我diagree這是一個確切的重複數據刪除技術。它可以歸結爲鏈接的問題,但在這裏 - 你有一個額外的限制。給定的數字集合是[1,2,...,100] - 而不是任意集合。 – amit

回答

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)) 
相關問題