python找零钱_Python递归 - 找零钱
特殊的方法-循环:
#无法解决某些情况,例如存在21元的零钱
def fun(n):
count = 0
while n > 25:
n = n - 25
count = count + 1
while n > 10:
n = n - 10
count = count + 1
while n > 5:
n = n - 10
count = count + 1
while n > 0:
n = n - 1
count = count + 1
return count
print(fun(63))
特殊的方法 - 递归:
def fun(n): # 分好类
if n <= 0:
return 0
elif n >= 25:
return 1 + fun(n-25)
elif n >= 10:
return 1 + fun(n-10)
elif n >= 5:
return 1 + fun(n-5)
elif n >= 1:
return 1 + fun(n-1)
print(fun(25))
递归 + 记忆:
import time
def recMD(valueList, change, Knowlist):
minNum = change
if change in valueList: # 可以作为结束条件
Knowlist[change] = 1
return 1
elif Knowlist[change] > 0: # 回忆
return Knowlist[change]
else:
for i in [c for c in valueList if c <= change]: # 常用
num = 1 + recMD(valueList, change - i, Knowlist)
if num < minNum:
minNum = num
Knowlist[change] = minNum
return minNum # 最后记得要返回
print(time.process_time()) # time.clock()被抛弃
print(recMD([1, 5, 10, 25], 77, [0]*79)) # 创建全为0的表
print(time.process_time())
递归 + 记忆 + 输出过程:
import time
from pythonds.basic.stack import Stack
def dp(valueList, change, minNum, coinUsed): # minNum初始化为0,之后需要利用到这些数据
for cents in range(1, change+1): # 从小到大递推
coinCount = cents # 初始化一个无害的最小值
newCoin = 1
for j in [c for c in valueList if c <= cents]: # 常用技巧
if 1 + minNum[cents-j] < coinCount:
coinCount = 1 + minNum[cents - j]
newCoin = j
minNum[cents] = coinCount
coinUsed[cents] = newCoin # 每一个change的最优解都是由两部分组成,这里是记录其中一部分
return minNum[change]
def printSelection(change, coinused):
coin = change
s = Stack()
while coin > 0:
thisCoin = coinused[coin]
s.push(thisCoin)
coin = coin - thisCoin
while not s.isEmpty():
print(s.pop())
valList = [1, 5, 10, 25]
amnt = 63
minN = [0]*64
coinUsed = [0]*64
print(dp(valList, amnt, minN, coinUsed)) # 创建表的方式get
print(coinUsed[1:]) # 打印全部
printSelection(amnt, coinUsed) # 打印组成部分
备注:
动态规划解法的必要条件:问题的最有解包含了更小规模的最优解,即每一步都要依靠前面某步的最优解
Talk is cheap. Show me the code. 将算法思路转化成具体代码需要不断实践,积累经验
python找零钱_Python递归 - 找零钱相关推荐
- python换零钱_Python算法之零钱兑换问题的解法
比如:顾客购物买37元东西,给了100元,要找63元,那最少数量就是1张50元,1张10元,3张1元,一共4张. 方法一: 贪心策略 解决这个问题,最直观的就是使用贪心策略.我们会从最大面值的钱开始, ...
- python找钱_python 递归 找零钱
首先回答你的问题 count = 1 + coins_changeREC(coin_values, change-value)#1.when reached here, one recursion l ...
- python黑洞数_Python练习 找黑洞数
#YYY BFSU 找黑洞数 n=str(input('please input a four-digit number\n')) a=list(n) a.sort() b=a[::-1] p=int ...
- python找人_python之找最后一个人
题目大概是:有10个人围成一圈,从第一个人数,数到3的人出局,问最后一个人是谁? 围成一圈,那就是无限循环,直至最后一个人,我们可以把10个人看做一个列表,每循环一次就把除3为0的数去除,下次再次循环 ...
- python静态递归函数_Python递归函数相关
函数中调用其他函数是解决实际问题中常用方法,递归函数便是函数在运行过程中调用自身的函数.它像是循环的另一种表达方式,不过相较于写循环,递归函数封装性较好.可读性较强.在解决一些循环问题时,使用递归函数 ...
- python找不到了_python包找不到
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我有一个名为dns_poison.py的文件需要调用名为netscanner的包 ...
- python通过路径找文件_Python寻找路径和查找文件路径的示例
怎么python系统的查找路径要是爱你爱的少些,话就可以说的多些了.简?奥斯汀 ⒈单击开始,在搜索框输入cmd,然后回车,就会出现命令行界面框后,在里面输入命令python后回车,安装成功的话就可以看 ...
- python冒泡排序算法非递归_python 冒泡排序,递归
今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...
- 递归找出文件夹里面所有文件
//递归找出文件夹里面所有文件 public static void main(String[] args) { File f=new File("c://123"); findF ...
最新文章
- Coding-数组(Array)
- 导师吐槽大会开始:自己招的学生,哭着也要带完
- 语义SLAM开源代码汇总
- MVC Razor 语法(转)
- 浅议gRPC的数据传输机制和回调机制
- 关于MySQL的死锁问题
- 《CSDN好师父》给你更好选择:“深圳工资、长沙房价、全球视野”
- java 植入 form_pdf form表单制作以及用java程序填充表单
- 20岁黑客发现苹果核心 web 应用中的严重漏洞,获奖$3.6万
- anndroid 之 Intent(意图)使用示例
- VOA ECONOMICS REPORT - Nearly Half of US Jobs Now Held by Women
- 价格便宜一半 这款智能座舱芯片实际性能却超越高通8155?
- SIEBEL应用概述
- 通过shell命名和TexturePacker工具,将.pvr.ccz批量转换为png格式
- EXCEL生成正态分布随机数据
- PYNQ-Z2上手笔记之系统安装
- 五分钟讲透开关电源buck降压基本原理
- 阿德莱德大学计算机专业学费,阿德莱德大学费用清单
- 1个系统节拍 c语言_【菜鸡C语言】菜鸡鼓起勇气用Dev-c++打起节奏来了
- TypeScripe中那些奇奇怪怪的符号?!??