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
posted @ 2024-05-16 10:33  刘宏缔的架构森林  阅读(77)  评论(0编辑  收藏  举报