python 最小硬币数_Python之动态规划(最少硬币数找零)
完整代码:
# 动态规划最少硬币数找零
def dpMakeChange(coinValueList, change, minCoins, coinsUsed):
for cents in range(change + 1):#依次循环从0到所需兑换面值的每一个面值
coinCount = cents #初始化最优解为当前面值数
newCoin = 1 #初始化找零硬币面值列表中的面值
for j in [c for c in coinValueList if c <= cents]:#在不大于要找零的硬币面值列表中循环
# 注:minCoins[cents - j] + 1 = cents - j的最优解 + 1(1是j的最优解,因为j为一个硬币) = cents的最优解 - j的最优解 + j的最优解 = cents的最优解,所以下一行代码的意思就是:若当前面值的最优解比上一循环(或初始)当前面值的最优解更小,则
if minCoins[cents - j] + 1 < coinCount:
coinCount = minCoins[cents - j] + 1 #临时保存当前面值的最优解
# 将当前硬币面值j临时保存为当前找零面值在找零硬币面值列表中的对应值
newCoin = j
minCoins[cents] = coinCount #记录当前找零面值在找零最优解列表中的最优解
coinsUsed[cents] = newCoin#记录当前找零面值在找零硬币面值列表中对应的值
return minCoins[change]#返回待找零数值的最优解
# 获取最终找零的硬币面值
def printCoins(coinsUsed, change):
while change > 0:
thisCoin = coinsUsed[change]#从找零硬币面值列表中获取对应的硬币面值
print(thisCoin, end = '、')
change = change - thisCoin #去除该面值后继续循环获取
def main():
amnt = 63 #待找零面值
clist = [1, 5, 10, 21, 25]#有效硬币面值列表,有序无序都可以
coinsUsed = [0] * (amnt + 1)#初始化找零硬币面值列表
coinCount = [0] * (amnt + 1)#初始化包含所有找零最优解的列表
zhao = dpMakeChange(clist, amnt, coinCount, coinsUsed)#获取找零硬币最少个数
resu = "找零" + str(amnt) + "美分需要" + str(zhao) + "个硬币。"
print(resu)
print("它们是:")
printCoins(coinsUsed, amnt)#获取最终找零的硬币面值
print("\n使用列表如下:")
print(coinsUsed)#找零硬币面值列表
print("所有数值最优解列表如下:")
print(coinCount)#包含从0到所需兑换面值的每一个面值对应的最优解
main()
结果为:
找零63美分需要3个硬币。
它们是:
21、21、21、
使用列表如下:
[1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 10, 1, 1, 1, 1, 5, 1, 1, 1, 1, 10, 21, 1, 1, 1, 25, 1, 1, 1, 1, 5, 10, 1, 1, 1, 10, 1, 1, 1, 1, 5, 10, 21, 1, 1, 10, 21, 1, 1, 1, 25, 1, 10, 1, 1, 5, 10, 1, 1, 1, 10, 1, 10, 21]
所有数值最优解列表如下:
[0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 3, 2, 3, 4, 3, 2, 3, 4, 5, 2, 3, 3, 4, 5, 3, 3, 4, 5, 6, 3, 4, 4, 3]
python 最小硬币数_Python之动态规划(最少硬币数找零)相关推荐
- java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现
硬币找零问题是动态规划的一个经典问题,其中最少硬币找零是一个变种,本篇将参照上一篇01背包问题的解题思路,来详细讲解一下最少硬币找零问题.如果你需要查看上一篇,可以点击下面链接: 详解动态规划01背包 ...
- 动态规划——最少硬币找零问题(python)
1. 问题描述 2. 思路 刚开始是想利用贪心算法.假如要找的零钱总额为49元,先找10块的,可以找40块,再继续找5块的,可以找5块,再继续找2块的,可以找4块.找够49元的最少纸币数为4 + 1 ...
- 最值动态规划——最少硬币组合
#include<iostream> #include<cstdio> #include<cstring> //本来想用 memset 函数来着,后来除了岔子!除了 ...
- python文件关键行数_Python计算大文件行数方法及性能比较
如何使用Python快速高效地统计出大文件的总行数, 下面是一些实现方法和性能的比较. 1.readline读所有行 使用readlines方法读取所有行: def readline_count(fi ...
- python判断回文数_Python练习题---判断回文数
设n是一个任意自然数,如果n的各位数字反向排序所得的自然数与n相等,则n被称为回文数,从键盘输入一个5位数字 ,请编写程序判断这个数字是不是回文数. 思路:先获取一个字符串,再判断该字符串是否满足是自 ...
- python递归判断回文数_Python实现判断回文数算法
回文数的定义:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例1: 输入:121 输出:True 示例2: 输入:-121 输出:False 解释: 从左向右读, 为 -121 . ...
- python项目代码量_python统计项目代码行数
stat.py #!/usr/bin/env python3 # -*- coding: utf-8 -*- import chardet import os import sys # 定义注释的格式 ...
- 硬币组合问题python_动态规划之硬币组合问题
问题:如果我们有面值为1元.3元和5元的硬币若干枚,如何用最少的硬币凑够11元? 动态规划的本质是将原问题分解为同性质的若干相同子结构,在求解最优值的过程中将子结构的最优值记录到一个表中以避免有时会有 ...
- python统计并输出文件的行数_python实用统计文件行数 类似wc命令
1.[代码][Python]代码 # -*- coding: GBK -* # Author: Seay # Blog :www.cnseay.com import os,sys def func_c ...
最新文章
- hdu1054 简单最小顶点覆盖
- 一、史上最强hadoop分布式集群的搭建
- DateTimePicker控件 1130
- Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解
- PowerDesigner导出SQL脚本运行注释出现乱码问题
- 定义域可以写成不等式吗_高一数学第一次月考考点之抽象函数定义域详解
- Python脚本覆盖率分析方法介绍
- Python爬取NBA虎扑球员数据
- 2018-PAT春季考试小结
- java 如何测试_java – 如何测试一个变量是否设置?
- strtoupper() 函数
- c语言 4x4矩阵乘法,C中的快速4x4矩阵乘法
- 统计假设检验中的P值及置信区间理解
- 【对可转债和期权的初步认识】
- 软件质量测试大作业示例
- 【red hat设置用户密码】passwd命令设置初始口令
- 利用MRTG进行网络流量监控
- VC动态更改窗口图标
- 谁说中国人没有信仰 -- 志深道远
- Win10局域网互传文件-wifi无线共享