当前位置:首页>python>Python算法案例100-11(三色球)

Python算法案例100-11(三色球)

  • 2026-09-10 04:48:59
Python算法案例100-11(三色球)

Python算法案例100-11(三色球)

1.问题描述

一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个 是黑的,现从中任取8个,问共有多少种可能的颜色搭配?

2.问题分析

根据问题描述可设任取的8个球中红球为m个,白球为n个,则黑 球为8-m-n个。又已知12个球中有3个红球、3个白球、6个黑球,因 此,m的取值范围为[0,3],n的取值范围为[0,3],黑球的个数小于 等于6,即8-m-n≤6。 

3.算法设计

由上述分析可知,红、白、黑三种颜色球的个数的取值范围已 经确定了,现在要求的是所有可能的颜色搭配情况,因此可以使用 循环结构检测m、n范围内的所有可能取值,再代入8-m-n≤6中进行 验证,能够满足条件8-m-n≤6的那些m、n和8-m-n的组合即为问题的 解。 

4.确定程序框架

程序流程图如图2.1所示。

5.完整的程序

根据上面的分析,编写程序如下:

# @desc: 三色球问题if __name__=="__main__":# 从12个球中任取8个,红球m个,白球n个,黑球8-m-n个# m的取值范围为[0,3],因此n的取值范围为[0,3],黑球的个数小于等于6,即8-m-n≤6print("\t 红球 \t 白球 \t 黑球") print("........................") num = 0for m in range(0, 4):    for n in range(0, 4):        if 8-m-n <= 6:            num += 1            print("%2d:  %d \t\t %d \t\t %d" %(num, m, n, 8-m-n))

6.运行结果

在PyCharm下运行程序,结果如图2.2所示。从输出结果中可 知,取出的8个球中,红、白、黑三色球可能的颜色搭配共有13种。

相关知识总结

7. 本题涉及的核心知识点

🔹(1)循环枚举(暴力搜索思想)

  • 使用双重 for 循环遍历所有可能情况
  • 枚举红球 m 和白球 n 的所有组合
  • 属于典型的“穷举法 / 暴力搜索”

🔹(2)变量建模思想

  • 用变量表示实际问题:
  • m:红球个数
  • n:白球个数
  • 8 - m - n:黑球个数
  • 把现实问题转化为数学表达式

🔹(3)约束条件判断核心条件:

  • 红球 ≤ 3
  • 白球 ≤ 3
  • 黑球 ≤ 6

转化为代码判断:8 - m - n <= 6

👉 本质是“在限制条件下寻找可行解”

🔹(4)计数思想

  • 使用 num += 1 统计满足条件的组合数量
  • 属于最基础的“计数问题模型”

8. 本题重点

✔ 重点一:如何把实际问题转成程序模型

  • 球 → 数量变量
  • 搭配 → 枚举组合
  • 限制条件 → if 判断

✔ 重点二:双重循环枚举方法

  • m:0 ~ 3
  • n:0 ~ 3
  • 构造所有可能组合(共 16 种基础情况)

✔ 重点三:条件筛选思想

  • 并不是所有组合都合法
  • 需要通过 if 过滤不符合条件的情况

9. 本题难点

❗ 难点一:如何想到“用变量表示球”

学生容易卡在:

  • 不知道 m、n 怎么设
  • 不知道如何转化问题

❗ 难点二:约束条件的正确转换

关键点:

  • 黑球 = 8 - m - n
  • 条件:黑球 ≤ 6
  • 转换为代码判断表达式

❗ 难点三:理解“枚举而不是计算公式”

10. 一句话总结

本题通过“变量建模 + 双循环枚举 + 条件筛选”,解决了组合计数问题,是学习暴力搜索与基础算法建模的经典入门案例。

拓展思考

如果改为:红球 5 个、白球 4 个、黑球 10 个、任取 9 个球你还能写出程序吗?

编程能力提升点

  • 枚举思想(最基础算法思想)
  • 条件筛选(if逻辑)
  • 数学建模(现实 → 变量)
  • 循环嵌套(双层for)

最新文章

随机文章