- from itertools import combinations_with_replacement as comb_rpl
- def changes(n, ls):
- cmb = {x for i in range(n//max(ls)-1, n//min(ls)+1)
- for x in comb_rpl(ls,i) if sum(x)==n}
- return len(cmb),cmb
- print(changes(50,[5,6,7,8,9]))
复制代码
- (56, {(7, 7, 9, 9, 9, 9), (5, 5, 5, 6, 6, 7, 8, 8), (5, 5, 6, 6, 7, 7, 7, 7), (6, 6, 6, 6, 6, 6, 6, 8), (5, 7, 7, 7, 8, 8, 8), (5, 5, 5, 6, 6, 6, 8, 9), (5, 6, 7, 7, 7, 9, 9), (5, 5, 5, 5, 6, 7, 8, 9), (5, 5, 6, 6, 6, 7, 7, 8), (5, 5, 5, 5, 5, 6, 6, 6, 7), (5, 6, 6, 6, 9, 9, 9), (5, 5, 6, 8, 8, 9, 9), (5, 7, 7, 7, 7, 8, 9), (5, 5, 5, 8, 9, 9, 9), (6, 6, 6, 7, 7, 9, 9), (5, 5, 6, 6, 6, 6, 8, 8), (7, 8, 8, 9, 9, 9), (5, 5, 5, 5, 5, 5, 5, 7, 8), (5, 5, 7, 8, 8, 8, 9), (6, 6, 7, 7, 8, 8, 8), (5, 6, 6, 6, 6, 7, 7, 7), (6, 7, 7, 7, 7, 7, 9), (6, 6, 6, 6, 6, 6, 7, 7), (5, 6, 7, 7, 8, 8, 9), (5, 5, 5, 5, 5, 5, 6, 6, 8), (6, 7, 7, 7, 7, 8, 8), (5, 5, 5, 5, 6, 8, 8, 8), (5, 5, 5, 5, 6, 6, 9, 9), (5, 6, 6, 6, 6, 6, 6, 9), (6, 6, 6, 6, 8, 9, 9), (5, 5, 7, 7, 8, 9, 9), (5, 5, 5, 5, 5, 7, 9, 9), (6, 6, 7, 7, 7, 8, 9), (5, 6, 6, 7, 8, 9, 9), (7, 7, 7, 7, 7, 7, 8), (8, 8, 8, 8, 9, 9), (5, 5, 8, 8, 8, 8, 8), (5, 9, 9, 9, 9, 9), (5, 6, 6, 6, 6, 6, 7, 8), (5, 5, 5, 5, 5, 8, 8, 9), (5, 5, 5, 5, 6, 6, 6, 6, 6), (5, 5, 5, 5, 7, 7, 7, 9), (5, 5, 5, 5, 5, 5, 5, 5, 5, 5), (6, 6, 6, 8, 8, 8, 8), (5, 5, 5, 5, 5, 5, 6, 7, 7), (5, 5, 5, 5, 7, 7, 8, 8), (5, 5, 6, 7, 9, 9, 9), (6, 6, 6, 7, 8, 8, 9), (5, 5, 5, 5, 5, 5, 5, 6, 9), (6, 8, 9, 9, 9, 9), (5, 5, 5, 6, 6, 7, 7, 9), (5, 5, 5, 7, 7, 7, 7, 7), (5, 6, 7, 8, 8, 8, 8), (5, 5, 5, 6, 7, 7, 7, 8), (5, 5, 6, 6, 6, 6, 7, 9), (5, 6, 6, 8, 8, 8, 9)})
复制代码 |