CC++ & Algorithm

加法原理——选一个就好

中等4
语言版本:C++Python
概述:当你要从几类事情中任选一件来做时,总的方法数就是各类方法数相加。

加法原理——选一个就好:把事情“或”起来

小朋友们,你有没有遇到过这种情况:早上妈妈让你选一种早餐,食堂里有好几种面包,还有好几种馒头,但你只想吃一个面点——那你有多少种不同的选择呢?这个问题其实非常简单,只要把面包的种类数和馒头的种类数加起来就行了。这种把不同类别的选择数直接相加的思考方式,就是编程中常说的 加法原理

加法原理是计数问题中的基础“武器”,它专门用来解决“从几类事情中任选一件来做,一共有多少种方法”的问题。记住一个关键词:“或者”。当你完成一件事可以选 A 方式 或者 B 方式,并且这两类方式不会同时发生(也就是互不重叠),那么总方法数 = A类的方法数 + B类的方法数。


1. 什么是加法原理?先看身边的小事

先来回顾一下开头那个吃早餐的例子:

早上去食堂,有 3 种面包(豆沙包、肉包、奶黄包),还有 2 种馒头(白馒头、玉米馒头)。如果你 只想选一个面点来吃,面包和馒头这两类互不重叠(你不可能同时既吃面包又吃馒头吧?),所以总选择数就是:3 + 2 = 5 种。

加法原理的数学表达
如果完成一件事有 n 类互不重叠的方式,第一类有 a₁ 种方法,第二类有 a₂ 种方法,……,第 n 类有 aₙ 种方法,那么总方法数 = a₁ + a₂ + … + aₙ。

更多贴近生活的例子:

  • 周末选择:你想出去玩,可以去 游乐场(有 6 个项目可选),或者去 图书馆(有 4 本新书可借)。注意,你只能去一个地方,不能分身。那么你总共的可选方案数 = 6 + 4 = 10 种。
  • 画笔选择:你有一盒水彩笔(8 种颜色)和一套彩铅(12 种颜色),如果只能选一支笔来画画(用其中一种),那么你一共有 8 + 12 = 20 种颜色选择。
  • 体育课活动:体育老师让你选一种球类运动:可以打 乒乓球(有 3 种不同球拍),或者 踢足球(有 5 个不同位置的练习)。你只能选一项,那么总选择 = 3 + 5 = 8 种。

看到没?加法原理特别简单,就是把不同“类别”里的选项数直接加起来。


2. Python 里怎么用加法原理?——用加号连起来

在 Python 代码中,加法原理的实现就是用一个简单的 加号 把各个类别的数量连起来。因为 Python 能直接计算数字相加,所以写起来非常方便。

例子1:选一件衣服出门

假设你有一件 T 恤有 3 种颜色(红、蓝、绿),还有一件外套有 2 种颜色(黑、白)。你想穿其中一件出门(只穿一件),一共有多少种搭配?

# 加法原理示例:选择一件衣服
t_shirt_colors = 3  # T恤颜色数
jacket_colors = 2   # 外套颜色数

# 加法原理:将不同类别的选择数相加
total_choices = t_shirt_colors + jacket_colors

print("总共有", total_choices, "种选择")
# 输出:总共有 5 种选择

例子2:学校美术课选材料

美术课选一种材料来做手工:要么用 印章(有 5 种图案),要么用 彩泥(有 3 种颜色模具)。只能选一种,求总共的选择数:

seal_choices = 5    # 印章图案数
clay_choices = 3    # 彩泥颜色模具数

total = seal_choices + clay_choices
print("你一共有", total, "种选择")
# 输出:你一共有 8 种选择

例子3:放学后的活动

放学后,你有两种选择:去 图书馆看书(书架上摆了 4 本不同的故事书可借),或者去 操场打球(有 6 种不同的球类游戏)。但你今天只能干一件事,那么你的选择总数是:

library_books = 4   # 图书馆可借的故事书种数
playground_games = 6  # 操场球类游戏种数

total_activities = library_books + playground_games
print("放学后你有", total_activities, "种不同的活动选择")
# 输出:放学后你有 10 种不同的活动选择

你看,代码里就是把每个类别的数字用 + 号加起来,像做数学加法一样简单。


3. 容易犯的3个错误(新手一定要小心!)

在使用加法原理时,不少同学会掉进下面这几个坑里。我们来看一看,避免犯错。

❌ 错误1:忘记“互不重叠”的条件

加法原理要求各类方法之间 不能有交叉。如果两类有重复,就不能直接相加。

反例:班级里有 20 个同学学过篮球,15 个同学学过足球,其中有 5 个同学两项都学过。如果让你选一个 至少学过一项运动 的同学,能直接 20 + 15 = 35 吗?
不行!因为那 5 个两个都学过的同学被重复计算了。正确做法要减去重叠部分(这属于 容斥原理,以后会学到)。

正确用法:加法原理只适用于 完全不重叠 的几类。比如“早餐要么吃面包,要么吃馒头” —— 面包和馒头没有重叠。

❌ 错误2:混淆加法原理和乘法原理

加法原理对应“或者”,乘法原理对应“并且”。

  • 加法:选 A 或者 选 B → 各选项数相加。
  • 乘法:先选 A 选 B(两步都要做) → 各步选项数相乘。

对比例子

  • 吃早餐选一个面点(面包或馒头)→ 加法:3 + 2 = 5
  • 穿衣服:先选T恤(3色)再选裤子(2色)搭配成一套 → 乘法:3 × 2 = 6

很多同学在做题时,看到“有几种不同选择”就盲目用加法,其实要先判断是“或”还是“且”。

❌ 错误3:漏掉其中一类或者多加了无关类别

有时候题目里有多类,但题目要求只选其中一类。比如:“你有一盒水彩笔(8色)和一套彩铅(12色),现在妈妈让你用其中一种笔给图画涂色,你一共有几种颜色选择?”
这时候只能选一种笔,所以答案是 8 + 12 = 20。但如果你错误地认为还可以用油画棒(假设你也有油画棒,但题目没提),就会多算。

所以一定要仔细读题,看清题目给了哪几类,每一类有多少种,是否互斥。


4. 一个完整的综合示例:周末活动大选

现在我们来写一个完整的 Python 程序,把加法原理用到真实的周末计划中。假设这个周末你有三个互斥的活动选项:

  1. 去公园玩:有 4 种不同的游戏项目可以玩(滑梯、秋千、攀爬架、沙池)。
  2. 去电影院看电影:有 3 部新电影可以选择。
  3. 在家玩游戏:有 5 种不同的桌游可以选。

你只能选择其中一项活动来度过这个周末。请你用 Python 计算一共有多少种不同的选择。

# 完整示例:周末活动选择(加法原理)
# 假设三类活动互不重叠,你只能选一项

# 定义每类活动的可选方案数
park_games = 4        # 公园游戏项目数
cinema_movies = 3     # 电影院可看电影数
board_games = 5       # 家里桌游数

# 加法原理:把三类方案数相加
total_options = park_games + cinema_movies + board_games

# 输出结果
print("这个周末你有", total_options, "种不同的活动选择")
# 输出:这个周末你有 12 种不同的活动选择

# 你想知道具体是哪些选择吗?我们可以用 Python 列表展示
print("--- 具体选项 ---")
print("公园游戏:滑梯、秋千、攀爬架、沙池")
print("电影院电影:电影A、电影B、电影C")
print("桌游:大富翁、狼人杀、UNO、飞行棋、拼图")

运行这段代码,你会看到控制台输出:“这个周末你有 12 种不同的活动选择”。这 12 种选择就是 4 + 3 + 5 的结果。


5. 加法原理之后,还能学什么?

加法原理是计数问题的基础,学会它之后,你可以继续学习:

  • 乘法原理:当需要“先……再……”分步完成时,用的就是乘法。比如搭配衣服、分配座位等。
  • 容斥原理:当几类方法有重叠时,不能直接用加法,要用“加 – 减”来去重。
  • 排列与组合:有时“选一个”还不够,你可能要选多个并考虑顺序(排列)或不考虑顺序(组合)。

记住,加法原理的核心就是 把不同的类别用“或”连接起来,然后加到一起。以后遇到“选一个”的问题,先看看有几类,每个类有多少种,只要类别之间不重叠,就放心大胆地用加法吧!

例题精讲

1单选题

小明有3件红色上衣、2件蓝色上衣、4件白色上衣,他要选一件上衣穿,共有多少种不同的选法?

A9种
B12种
C24种
D7种
2单选题

从甲地到乙地有3条公路、2条铁路、1条航线。那么从甲地到乙地共有几种不同的走法?

A6种
B5种
C3种
D2种
3判断题

一个班级有20个男生和15个女生,要选出一名代表,那么共有35种不同的选法。

4填空题
以下函数用于计算加法原理下的总方法数。已知有三类互斥的选择,方法数分别为a、b、c,请补全函数使返回总方法数。

def total_ways(a, b, c):
    return ___
5单选题

书架上有5本数学书、3本语文书、2本英语书,从中任选一本,有多少种不同的选法?

A10种
B8种
C30种
D5种