python 货币找零

本文介绍了使用Python解决货币找零问题的两种方法:贪心算法和递归解法。通过贪心策略,寻找最优的硬币组合以完成找零;递归方案则通过自底向上的方式遍历所有可能性。这两种方法在不同的场景下各有优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贪心算法

value = [1, 5, 10, 25]   #零钱分类
ans = [0] * len(value)   #根据硬币种类创建数组
print(ans)
n = len(value)
money = int(input())
for j in range(0,n):
    i = n - j - 1     # 从最大金额开始(j从0开始,i=n-j-1 刚还对应value[i]最后一个元素,即最大面额的货币)
    ans[i] = money // value[i]   #用面值最大的硬币除,不能除就是0
    money = money - ans[i] * value[i]  # 余下待找的零钱为money - ans[i] * value[i].
    # ans[i]为value数组第i位货币对应的数量,value[i]为第i位置对应的货币面额

for j in range(0,n):
    i = n - j - 1
    print(value[i],'分硬币数',ans[i])

[0, 0, 0, 0]
63
25 分硬币数 2
10 分硬币数 1
5 分硬币数 0
1 分硬币数 3

贪心解法2

递归解法

# 递归解决找零问题v1。
import time
start =  time.time()
def recMC(coinValueList, change):
    minCoins = change
    if change in coinValueList:
        return 1  # 最小规模,直接返回。
    else:
        for i in [c for c in coinValueList if c <= change]:
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值