本帖最后由 lightninng 于 2015-5-1 19:59 编辑
python版块的我来凑个热闹
1、解题思路:把问题由大划小,先想一个数用一种货币有多少种组合方法;在一种的基础上想两种货币怎么解决,可以想到,一种货币的数目固定了,另外一种的数目就固定了;在两种的基础上想三种,同理,两种的数目确定了便可以确定第三种的数目
基于此,递归函数解决的问题为,用n种不同的货币组成总钱数为m的方法的数目
例如,总数为200钱币,面值为100的钱币可以有三种选择方法,0,1,2,则在100的钱币为0,1,2的时候用剩下的面值的钱币分别组合成200,100,0即可
2、代码如下:COUNT = 0 # 变量用于存储构造方法的数目
def coin_sums(pre_sum, coin_values, sum_value):
global COUNT
if len(coin_values) == 1:
if sum_value % coin_values[0] == 0:
COUNT += 1
# print(pre_sum +
# "{0}*{1}p".format(sum_value//coin_values[0], str(coin_values[0])))
else:
for i in range(sum_value//coin_values[0] + 1):
coin_sums(pre_sum + "{0}*{1}p + ".format(i, str(coin_values[0])),
coin_values[1:], sum_value-i*coin_values[0])
target = 200
coin_sums("{}p = ".format(str(target)), [100, 50, 20, 10, 5, 2, 1], target)
print(COUNT)
运行结果>>> ================================ RESTART ================================
>>>
73681
>>>
|