python算法:换硬币
一,for循环:
1,功能:重复执行同一段代码
语法:
for index in range(n):
# 循环体代码
index : 用来依次接收可迭代对象中的元素的变量名
range()函数:负责返回整数序列
流程图:
2,应用
range可以同时指定start 和stop,用for遍历并打印
1
2
3
4
|
# 指定 start和stop # print的参数 end=" " 用来使打印不换行 for num in range ( 3 , 9 ): print (num, end = " " ) |
运行结果:
3 4 5 6 7 8
说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/29/python-suan-fa-huan-ying-bi/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,换硬币的题目与分析
1,题目:
将5元的人民币兑换成1元、5角和1角的硬币,
共有多少种不同的兑换方法?
2,分析:
设变量x、y和z分别代表兑换的1元、5角和1角的硬币的个数
根据题目的要求,可得到如下的方程:以1角为单位:
10X+5y+z=50
根据题意可知x、y和z的取值范围:
1元硬币,从0个到5个
5角硬币, 从0个到10个
1角硬币, 从0个到50个
为实现该功能,需要使用三个嵌套的for循环语句,
根据三个取值范围循环即可
三,编写代码:
1,第一版:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 变量x、y和z分别代表兑换的1元、5角和1角的硬币所具有的钱数(角) count = 0 # 计数器 print ( "可能的兑换方法如下:" ) for x in range ( 0 , 5 + 1 ): # 1元硬币,从0个到5个 for y in range ( 0 , 10 + 1 ): # 5角硬币,最多10个 for z in range ( 0 , 50 + 1 ): # 1角硬币,最多50个 if x * 10 + y * 5 + z = = 50 : count + = 1 if count % 3 = = 0 : # 每3列一行 print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" ) else : print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" , end = " " ) |
运行结果:
可能的兑换方法如下:
1 1元:0 5角:0 1角:50 2 1元:0 5角:1 1角:45 3 1元:0 5角:2 1角:40
4 1元:0 5角:3 1角:35 5 1元:0 5角:4 1角:30 6 1元:0 5角:5 1角:25
7 1元:0 5角:6 1角:20 8 1元:0 5角:7 1角:15 9 1元:0 5角:8 1角:10
10 1元:0 5角:9 1角:5 11 1元:0 5角:10 1角:0 12 1元:1 5角:0 1角:40
13 1元:1 5角:1 1角:35 14 1元:1 5角:2 1角:30 15 1元:1 5角:3 1角:25
16 1元:1 5角:4 1角:20 17 1元:1 5角:5 1角:15 18 1元:1 5角:6 1角:10
19 1元:1 5角:7 1角:5 20 1元:1 5角:8 1角:0 21 1元:2 5角:0 1角:30
22 1元:2 5角:1 1角:25 23 1元:2 5角:2 1角:20 24 1元:2 5角:3 1角:15
25 1元:2 5角:4 1角:10 26 1元:2 5角:5 1角:5 27 1元:2 5角:6 1角:0
28 1元:3 5角:0 1角:20 29 1元:3 5角:1 1角:15 30 1元:3 5角:2 1角:10
31 1元:3 5角:3 1角:5 32 1元:3 5角:4 1角:0 33 1元:4 5角:0 1角:10
34 1元:4 5角:1 1角:5 35 1元:4 5角:2 1角:0 36 1元:5 5角:0 1角:0
2,优化循环的范围:
已知1元硬币的数量时,5角和1角硬币不需要循环全部范围
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 变量x、y和z分别代表兑换的1元、5角和1角的硬币所具有的钱数(角) count = 0 # 计数器 print ( "可能的兑换方法如下:" ) for x in range ( 0 , 5 + 1 ): # 1元硬币,从0个到5个 j5end = int (( 10 * 5 - x * 10 ) / 5 ) # 5角硬币,最多10个 for y in range ( 0 , j5end + 1 ): j1end = 50 - x * 10 - y * 5 # 1角硬币,最多50个 for z in range ( 0 , j1end + 1 ): if (x * 10 + y * 5 + z = = 50 ): count + = 1 if count % 3 = = 0 : # 每3列一行 print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" ) else : print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" , end = " " ) |
运行结果同上
3,优化循环的层数:
已知1元硬币和5角硬币的数量时,1角硬币的数量已可以确定,无需再循环一层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 变量x、y和z分别代表兑换的1元、5角和1角的硬币所具有的钱数(角) count = 0 # 计数器 print ( "可能的兑换方法如下:" ) for x in range ( 0 , 5 + 1 ): # 1元硬币,从0个到5个 j5end = int (( 10 * 5 - x * 10 ) / 5 ) # 5角硬币,最多10个 for y in range ( 0 , j5end + 1 ): # 5角硬币,最多10个 z = 50 - x * 10 - y * 5 if z > = 0 : count + = 1 if count % 3 = = 0 : # 每3列一行 print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" ) else : print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" , end = " " ) |
运行结果同上
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2023-05-16 配置wordpress:可重用区块(wordpress 6.2)
2020-05-16 ansible:安装nginx1.18.0(使用role功能)