加法原理与乘法原理
中等3加法原理与乘法原理:数一数有多少种可能
同学们,今天我们来学习数学里非常实用的一对“好兄弟”——加法原理和乘法原理。它们是组合数学的基石,专门用来回答“一共有多少种不同的方法”这样的问题。比如:你周末想买一杯奶茶,有几种口味可以选?你穿衣服有多少种搭配?从家到学校有多少条路可走?——这些问题都能用这两个原理轻松解决。在编程中,我们也经常需要计算方案数,理解这两个原理能帮你写代码时思路更清晰。
1. 从生活场景认识计数问题
先看两个身边的小例子:
-
穿衣搭配:衣柜里有3件上衣和2条裤子。如果只穿一件上衣和一条裤子,一共有多少种不同的搭配?你可能会想:先选上衣(3种),再选裤子(2种),结果是 3 × 2 = 6 种。这就是乘法原理。
-
出行方式:从家到学校,可以坐2路公交车,或者骑自行车。公交车有1种方式(坐2路),骑自行车也有1种方式,所以总共是 1 + 1 = 2 种方式。这就是加法原理。
这两个原理看起来很简单,但它们是所有计数问题的基础。记住一个口诀:分类用加法,分步用乘法。下面我们详细拆解。
2. 加法原理(分类计数)
2.1 什么是加法原理
加法原理说:如果完成一件事有 n 类不同的方法,并且这些方法互不重叠(即选择了一类就只能用该类的方法,不能同时用两类),那么总方法数就是每类方法数的和。
数学公式:
总方法数 = 第1类方法数 + 第2类方法数 + ... + 第n类方法数
关键点:“分类”——每一类方法都能独立完成这件事,类与类之间没有交叉。
2.2 更多生活例子
例子1:买冰淇淋
你去冰淇淋店,可以选三种口味:香草味(有3种配料可选)、巧克力味(有2种配料可选)、草莓味(有4种配料可选)。但注意,你只能选一种口味(不能混合),而且每一种口味下你只能选其中一种配料(这里配料种类已经包含在口味分类里)。那么买一个冰淇淋的方案数 = 香草类的3种 + 巧克力类的2种 + 草莓类的4种 = 9种。
(实际上这里每个口味下的配料是独立的,但分类本身只考虑“选哪种口味”,每一类中只有一种选择——即配料搭配固定?这个例子可以优化:其实更典型的是“选一个汉堡套餐”:有鸡肉套餐3种、牛肉套餐2种、鱼排套餐4种,你只能选一个套餐,总方案数 = 3+2+4=9种。)
例子2:周末活动
周末你可以选择:去游乐园(有5种游玩项目)、去图书馆(有3种书可以看)、或者在家打游戏(有2种游戏)。因为你只能选一种活动,所以总共有 5 + 3 + 2 = 10种选择。
例子3:考试选择题
一道选择题有4个选项,但答案只有一个。这里“选对”这件事只有一类方法(选A、选B、选C、选D),所以正确答案的方法数是1种(假设只有一个正确选项)。但如果题目是“以下哪些选项正确?”(多选题),那就是另一类问题了。
2.3 加法原理的常见错误
常见错误是:误把需要分步完成的事情当成分类。比如:“从家到学校,可以先坐地铁再转公交” — 这需要两步,不是分类,应该用乘法。只有当你用不同的方式独立完成时才用加法。比如“坐地铁或坐公交”才是分类(两者都能直接到达),而“先坐地铁再坐公交”是分步(缺一不可)。
3. 乘法原理(分步计数)
3.1 什么是乘法原理
乘法原理说:如果完成一件事需要分成 n 个连续的步骤,并且每一步都有若干种选择,且所有步骤必须依次完成才能做完这件事,那么总方法数就是每步方法数的乘积。
数学公式:
总方法数 = 第1步方法数 × 第2步方法数 × ... × 第n步方法数
关键点:“分步”——每一步都不能独立完成整件事,必须所有步骤都做完才算完成。
3.2 更多生活例子
例子1:点餐
你去快餐店点一个套餐:先选主食(汉堡、鸡肉卷、米饭共3种),再选饮料(可乐、雪碧、果汁共3种),最后选小食(薯条、鸡翅共2种)。那么总套餐组合 = 3 × 3 × 2 = 18种。
例子2:密码锁
一个3位数的密码锁,每一位可以选0~9中的任意数字(共10种)。那么所有可能密码 = 10 × 10 × 10 = 1000种。
例子3:排队拍照
你和小红、小明三个人排队拍照,位置有顺序(第一、第二、第三)。第一步选谁站第一个(3种),第二步从剩下两人中选谁站第二个(2种),第三步最后一人站第三个(1种)。总排列数 = 3 × 2 × 1 = 6种。这就是排列数的计算。
3.3 乘法原理的常见错误
有人会忘记步骤之间的影响。比如从10个人中选3个人站成一排,第一步选第一人(10种),第二步选第二人(9种,因为不能重复),第三步选第三人(8种),结果是 10×9×8。如果错误地认为每一步都是10种,就会得出错误的1000种。要记住:每步的可选数可能会因为前面的选择而减少。
4. 加法原理与乘法原理对比
| 特点 | 加法原理(分类) | 乘法原理(分步) |
|---|---|---|
| 完成方式 | 任选一类即可完成 | 所有步骤都做完才完成 |
| 计算方法 | 每类方法数相加 | 每步方法数相乘 |
| 常见关键词 | “或者”、“要么…要么…” | “先…再…”、“然后”、“依次” |
| 类/步之间关系 | 互斥(不相交) | 相互连接(顺序固定) |
| 举例 | 从A到B可坐飞机或火车(2种方式) | 从A到B需先坐公交再坐地铁(3×2=6种) |
5. 编程实现:计算方案数
在编程中,我们经常需要输入各类或各步的方法数,然后输出总方案数。下面分别用C++和Python实现加法原理和乘法原理的简单计算。
C++ 代码实现
#include <iostream>
using namespace std;
int main() {
// ========== 加法原理示例 ==========
// 有三类方法:第一类有a种,第二类有b种,第三类有c种
int a, b, c;
cout << "请输入第一类方法的数量: ";
cin >> a;
cout << "请输入第二类方法的数量: ";
cin >> b;
cout << "请输入第三类方法的数量: ";
cin >> c;
int sum = a + b + c; // 加法:总方案数 = 各类之和
cout << "加法原理总方案数: " << sum << endl;
// ========== 乘法原理示例 ==========
// 分三步完成:第一步有step1种,第二步有step2种,第三步有step3种
int step1, step2, step3;
cout << "请输入第一步的方法数: ";
cin >> step1;
cout << "请输入第二步的方法数: ";
cin >> step2;
cout << "请输入第三步的方法数: ";
cin >> step3;
int product = step1 * step2 * step3; // 乘法:总方案数 = 各步之积
cout << "乘法原理总方案数: " << product << endl;
return 0;
}
Python 代码实现
# ========== 加法原理示例 ==========
a = int(input("请输入第一类方法的数量: "))
b = int(input("请输入第二类方法的数量: "))
c = int(input("请输入第三类方法的数量: "))
total_sum = a + b + c # 加法:总方案数 = 各类之和
print("加法原理总方案数:", total_sum)
# ========== 乘法原理示例 ==========
step1 = int(input("请输入第一步的方法数: "))
step2 = int(input("请输入第二步的方法数: "))
step3 = int(input("请输入第三步的方法数: "))
total_product = step1 * step2 * step3 # 乘法:总方案数 = 各步之积
print("乘法原理总方案数:", total_product)
运行示例:
- 输入:第一类3,第二类2,第三类4 → 加法输出9。
- 输入:第一步3,第二步2,第三步4 → 乘法输出24。
6. 混合应用:先分类再分步(组合使用)
很多实际问题需要同时用到加法和乘法。比如学校要举办才艺汇演,节目分为三类:唱歌、跳舞、朗诵。
- 唱歌:有5首歌曲可选,每首歌曲需要1名主唱和1名伴舞(不能是同一个人)。
- 跳舞:有3支舞蹈可选,每支舞蹈需要2名舞者(角色相同,但顺序不重要,简化起见我们假设有主次之分)。
- 朗诵:有2篇朗诵稿可选,每篇需要1名朗读者。
假设候选人有10人,且每个人都能担任任意角色(不考虑能力限制)。问一共有多少种不同的节目方案?
分析:
首先要选节目类别(加法),每一类内部再分步(乘法)。
- 唱歌类:先选歌曲(5种),再选主唱(10种),再选伴舞(从剩下的9人中选,9种)。所以唱歌类方案数 = 5 × 10 × 9 = 450种。
- 跳舞类:先选舞蹈(3种),再选第一舞者(10种),再选第二舞者(9种)。这里假设第一、第二有顺序(比如领舞和伴舞),所以是 3 × 10 × 9 = 270种。如果两人无区别,则需要除以2,但先不深入。
- 朗诵类:先选朗诵稿(2种),再选朗读者(10种),共 2 × 10 = 20种。
总方案数(按加法) = 450 + 270 + 20 = 740种。
这个例子展示了“先分类(加法),每一类内部分步(乘法)”的经典思路。
7. 新手容易犯的错
-
混淆分类与分步:看到“或者”就用加法,看到“然后”就用乘法,但实际中可能有“或者”但内部有步骤。比如“从家到学校,可以步行或者骑车,但步行需要先出门再走路” — 其实“步行”和“骑车”是两类,每一类内部可能还有步数(比如步行分出门、走路、进校门三步,但那是该类内部的步骤,加法只统计类数目)。正确做法:先分类,再对每一类用乘法。
-
忽略步骤之间的约束:比如从10人中选3个不同的人站成一排,第二步不能选第一步选过的人。如果忘记扣减,就会多算。
-
误用加法于重叠情况:如果两类方法有重叠(比如既能坐公交又能骑自行车,但有一条路两者都行),那么加法会重复计数,这时要用容斥原理。初学者通常先学加法原理时假设类之间互斥。
8. 完整示例:一个完整的计数问题
题目:一个盒子里有红、黄、蓝三种颜色的球各2个,共6个球。现在要取出两个球(不考虑顺序),有多少种取法?
分析:这是组合问题,但可以用分类分步思想。
- 分类1:取两个同色球。红球有2个,取两个只有1种(因为只有两个)。类似,黄、蓝各有1种,所以同色共 1+1+1=3种。
- 分类2:取两个不同色球。先选颜色组合:红黄、红蓝、黄蓝,共3种颜色对。对于每种颜色对,每种颜色各取1个。由于每种颜色有2个球,所以选一个红的(2种),选一个黄的(2种),共 2×2=4种。注意这里是分步:先选红球再选黄球,但两个球不区分顺序?实际上“取两个不同色”相当于从两种颜色中各取一球,顺序不重要,但乘法2×2已经考虑了所有有序对(比如红1+黄1、红1+黄2、红2+黄1、红2+黄2),共4种,正好。所以不同色方案数 = 3 × 4 = 12种?不对,仔细想:颜色对有3种,每种颜色对有2×2=4种具体球组合,所以不同色总方案数 = 3 × 4 = 12种。
- 总方案数 = 同色3种 + 不同色12种 = 15种。
我们可以用组合数公式验证:从6个球中取2个,组合数 C(6,2)=15,正确。这个例子混合了分类和乘法。
9. 练习题(动手试试)
-
出行路线:从A地到B地有3条公路,从B地到C地有2条铁路,另外从A地可以直接飞到C地有1条航线。问从A到C一共有多少种不同的走法?(提示:要么直接飞,要么先到B再到C,这是分类,而先到B再到C是分步)
-
组成三位数:用数字1、2、3、4可以组成多少个没有重复数字的三位数?(提示:百位有4种,十位有3种,个位有2种)
-
午餐搭配:食堂午餐有3种主食(米饭、面条、馒头),4种主菜(红烧肉、鱼香肉丝、宫保鸡丁、西红柿炒蛋),2种汤(紫菜汤、蛋花汤)。如果每人选一种主食、一种主菜、一种汤,有多少种不同的套餐?
答案:
- 直接飞:1种;先到B再到C:3×2=6种;总共1+6=7种。
- 4×3×2=24个。
- 3×4×2=24种。
10. 小结与相关指引
加法原理和乘法原理是计数的“左膀右臂”。记住六个字:分类加法,分步乘法。在编程中,我们经常用简单的加减乘除来计算方案数,但要注意题目中的“或”与“先后”。掌握了这两个原理,你就能轻松过渡到更复杂的知识:
- 排列:从n个不同元素中取m个排成一列,公式 P(n,m)=n×(n-1)×...×(n-m+1),就是乘法原理的连续应用。
- 组合:从n个不同元素中取m个(不考虑顺序),公式 C(n,m)=P(n,m)/m!,需要用到除法。
- 容斥原理:当分类有重叠时,用加法会重复计数,需要减去重叠部分。
- 动态规划:很多计数问题可以通过分步递推解决,核心依然是加法和乘法。
希望你能通过这些例子,牢牢掌握这两个原理,以后遇到“有多少种可能”的问题时,自信地说:“先分类,再分步,加起来,乘起来!”
例题精讲
从A地到B地有3条不同的路径,从B地到C地有4条不同的路径,那么从A地经过B地到C地共有多少种不同的走法?
一个书架有两层,第一层有5本不同的数学书,第二层有3本不同的语文书,从中任取一本,有多少种不同的取法?
用0、1、2三个数字组成三位数(数字可以重复)时,百位有2种选择(1或2),十位和个位各有3种选择,根据乘法原理共可组成2×3×3=18个不同的三位数。
从5个不同的礼物中选2个送给两个人,每人一个,且礼物不能重复,共有5×4=20种不同的送法。
计算从n个不同元素中取出k个元素的排列数(无重复)。请补充以下Python函数:
def permutation(n, k):
ans = 1
for i in range(___, n+1):
ans *= i
return ans