原题链接
本题是计算思维的很好的例子,不要想着去找出一个算法,得到结果,而是让计算机去模拟整个换硬币的过程,比如说,给定的是14,则先将其全部换成5,可以换为2个5,还剩13-2*5 = 4,再将剩下的4换成最多的2,可以换2个2,但是此时,还剩下0元,换不成1了,所以不能将换完了5之后剩下的4全部换成2,而是换成1个2,还剩下2元,再换成两个1。
即让计算机去模拟这个过程。
代码
x,cnt = eval(input()),0
for cnt5 in range(x//5,0,-1):
for cnt2 in range((x-5*cnt5)//2,0,-1):
for cnt1 in range((x-5*cnt5-2*cnt2),0,-1):
if 5*cnt5+2*cnt2+cnt1 == x:
print("fen5:{}, fen2:{}, fen1:{}, total:{}".\
format(cnt5,cnt2,cnt1,cnt5+cnt2+cnt1))
cnt += 1
print("count = {}".format(cnt))
代码中,自动保证了cnt5、cnt2、cnt1都不为0,如果5cnt5+2cnt2+cnt1等于x,则找到一个结果,输出即可。