【趣学Python算法100例】三色球

问题描述

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

问题分析

从问题里我们知道,随便挑8个球,里面红色的球我们叫它m个,白色的球叫做n个,那么剩下的黑色球自然就是8减去m再减去n个了。现在给的信息是,全部12个球里有3个红球、3个白球和6个黑球。所以,红色球m最多只能有3个,白色球n也一样,最多3个。黑色球呢,因为总数只有6个,所以你拿的8个球里,黑色的球不可能超过6个,换句话说,8减去m再减去n这个数得是6或者更小。

完整代码

python 复制代码
'''
Author: didiplus
Date: 2024-09-24 16:12:37
LastEditTime: 2024-09-24 16:20:31
LastEditors: didiplus
Description: 
FilePath: \pythonscript\python\趣学Python算法100例\11、三色球\demo.py
'''
def count_color_combinations(red, white, black, total):
    """
    计算给定颜色数量下能组成的颜色组合。

    该函数根据给定的红、白、黑三种颜色的数量,计算能够组成的总球数的组合。
    它通过嵌套循环,遍历所有可能的红球和白球数量,计算对应的黑球数量,
    如果黑球数量在允许的范围内,则将该组合添加到结果列表中。

    参数:
    red (int): 红球的最大数量。
    white (int): 白球的最大数量。
    black (int): 黑球的最大数量。
    total (int): 组合中的总球数。

    返回:
    list: 包含所有可能的颜色组合的列表,每个组合是一个元组,包含红、白、黑球的数量。
    """

    # 初始化存储颜色组合的列表
    combinations = []

    # 遍历所有可能的红球数量
    for r in range(red + 1):
        # 遍历所有可能的白球数量
        for w in range(white + 1):
            # 计算黑球的数量
            b = total - r - w
            # 检查黑球的数量是否在允许的范围内
            if b >= 0 and b <= black:
                # 将符合条件的颜色组合添加到结果列表中
                combinations.append((r, w, b))

    # 返回所有可能的颜色组合
    return combinations

if __name__ == "__main__":
    red_balls = 3
    white_balls = 3
    black_balls = 6
    total_balls = 8

    all_combinations = count_color_combinations(red_balls, white_balls, black_balls, total_balls)
    print("共有", len(all_combinations), "种可能的颜色搭配:")
    print("红球 \t 白球 \t 黑球")
    print("........................")    
    for combination in all_combinations: 
        print(" %d \t %d \t %d" %( combination[0], combination[1], combination[2]))

运行结果

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

相关推荐
火云洞红孩儿2 小时前
告别界面孤岛:PyMe如何用一站式流程重塑Python GUI开发?
开发语言·python
TTGGGFF2 小时前
控制系统建模仿真(四):线性控制系统的数学模型
人工智能·算法
攻城狮7号2 小时前
不懂代码也能造?TRAE+GLM-4.6 手把手教你搭心理咨询智能客服小程序
python·小程序·uni-app·vue·trae·glm我的编程搭子·glm-4.6
叫我辉哥e12 小时前
新手进阶Python:办公看板集成ERP跨系统同步+自动备份+AI异常复盘
开发语言·人工智能·python
晚风吹长发2 小时前
初步了解Linux中的命名管道及简单应用和简单日志
linux·运维·服务器·开发语言·数据结构·c++·算法
C++ 老炮儿的技术栈3 小时前
不调用C++/C的字符串库函数,编写函数strcpy
c语言·开发语言·c++·windows·git·postman·visual studio
布局呆星3 小时前
闭包与装饰器
开发语言·python
Σίσυφος19003 小时前
Halcon中霍夫直线案例
算法
fyzy3 小时前
C++写后端实现,实现前后端分离
开发语言·c++
全栈测试笔记3 小时前
异步函数与异步生成器
linux·服务器·前端·数据库·python