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/23/python-suan-fa-san-se-qiu/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,三色球的题目和解析
1,题目:
一个口袋中放有12个球,已知其中
3个是红的,
3个是白的,
6个是黑的,
现从中任取8个,问共有多少种可能的颜色搭配?
2,解析:
分析:
从12个球中任取8个,
设红球m个,白球n个,黑球8 – m – n个
m的取值范围为[0,3],
n的取值范围为[0, 3],
黑球的取值范围:[2,6]
应大于等于2,即 >=2
应小于等于6,即<=6
思路:
a, 按取值范围三层循环,
只要符合三个值相加等于8即可
b, 可以对三层循环进一步优化:
去掉第三层循环,
判断8 – m – n的取值是否在2到6之间
三,编写代码:
1,三层循环
1
2
3
4
5
6
7
8
9
10
11
|
# 从12个球中任取8个,红球r个,白球w个,黑球b个 # r的取值范围为[0,3],w的取值范围为[0, 3], # 黑球b的个数大于等于2,即b>=2,小于等于6,即b<=6 print ( "\t 红球 \t 白球 \t 黑球" ) num = 0 # 计数器,匹配的方案数量 for r in range ( 0 , 4 ): # 红球最少0个,最多3个 for w in range ( 0 , 4 ): # 白球最少0个,最多3个 for b in range ( 2 , 7 ): # 黑球最少2个,最多6个, if r + w + b = = 8 : # 是否是8个? num + = 1 print ( "%2d: %d \t\t %d \t\t %d" % (num, r, w, b)) |
运行结果:
红球 白球 黑球
1: 0 2 6
2: 0 3 5
3: 1 1 6
4: 1 2 5
5: 1 3 4
6: 2 0 6
7: 2 1 5
8: 2 2 4
9: 2 3 3
10: 3 0 5
11: 3 1 4
12: 3 2 3
13: 3 3 2
2,两层循环
1
2
3
4
5
6
7
8
9
10
11
|
# 从12个球中任取8个,红球r个,白球w个,黑球8 - m - n个 # m的取值范围为[0,3],因此n的取值范围为[0, 3], # 黑球的个数 为 8 - m - n取值范围:[2,6] # 应大于等于2,即 >=2 应小于等于6,即<=6 print ( "\t 红球 \t 白球 \t 黑球" ) num = 0 # 计数器,匹配的方案数量 for r in range ( 0 , 4 ): # 红球最少0个,最多3个 for w in range ( 0 , 4 ): # 白球最少0个,最多3个 if 8 - r - w < = 6 and 8 - r - w > = 2 : # 黑球最少2个,最多6个, num + = 1 print ( "%2d: %d \t\t %d \t\t %d" % (num, r, w, 8 - r - w)) |
运行结果:
红球 白球 黑球
1: 0 2 6
2: 0 3 5
3: 1 1 6
4: 1 2 5
5: 1 3 4
6: 2 0 6
7: 2 1 5
8: 2 2 4
9: 2 3 3
10: 3 0 5
11: 3 1 4
12: 3 2 3
13: 3 3 2