|
发表于 2015-4-25 22:25:15
|
显示全部楼层
本帖最后由 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
- >>>
复制代码 |
|