计数原理与排列组合
加法原理:做一件事情,有 \(n\) 类办法,第 \(1\) 类办法有 \(m_1\) 种方法,第 \(2\) 类办法有 \(m_2\) 种方法,第 \(n\) 类办法有 \(m_n\) 种方法,则完成这件事情的办法有 \(m_1+m_2+\cdots+m_n\) 种。
加法原理属于分类计数原理,分类需要包含所有情况,类与类之间不会产生重复。
乘法原理:做一件事情,需要分 \(n\) 个步骤,第 \(1\) 步有 \(m_1\) 种方法,第 \(2\) 步有 \(m_2\) 种方法,第 \(n\) 步有 \(m_n\) 种方法,则完成这件事情的方法有 \(m_1 \times m_2 \times \cdots \times m_n\) 种。
乘法原理属于分步计数原理,分步应注意如果各步依次独立完成,整个事件也应完成。
计算题:将 \(3\) 个相同的红球和 \(3\) 个相同的黑球装入三个不同的袋中,每袋均装 \(2\) 个球,则不同的装法总数是?
答案
用 R 指代红球,用 B 指代黑球,将三个不同的袋分别命名为 a,b,c,则一旦 a 和 b 中的球确定,c 中的球自然就被确定,因此考虑 a 和 b 中放了什么即可。

选择题:小明希望选到形如“省A·LLDDD”的车牌号。车牌号在“·”之后的 5 位号码中,前 2 位必须是大写英文字母,后 3 位必须是阿拉伯数字(L 代表 A 到 Z,D 代表 0 至 9,两个 L 和三个 D 之间可能相同也可能不同)。请问总共由多少个可供选择的车牌号。
- A. 20280
- B. 52000
- C. 676000
- D. 1757600
答案
\(26 * 26 * 10 * 10 * 10 = 676000\),答案选 C。
选择题:一些数字可以颠倒过来看,例如 0,1,8 颠倒过来还是本身,6 颠倒过来是 9,9 颠倒过来看还是 6,其他数字颠倒过来都不构成数字。类似地,一些多位数也可以颠倒过来看,比如 106 颠倒过来是 901。假设某个城市的车牌只有 5 位数字,每一位都可以取 0 到 9。请问这个城市有多少车牌倒过来恰好还是原来的车牌,并且车牌上的 5 位数能被 3 整除?
- A. 40
- B. 25
- C. 30
- D. 20
答案
B。
这个问题结合了组合数学和数论的知识。我们需要分两步来解决:
- 找出所有满足“颠倒过来还是原来车牌”的 5 位数车牌的结构。
- 在这些车牌中,筛选出能被 3 整除的号码。
第一步:分析“颠倒不变”的车牌结构
一个 5 位数的车牌号可以表示为 d₁d₂d₃d₂d₁。
当它被颠倒过来看时,顺序会反转,并且某些数字会变成新的数字。
- 颠倒后不变的数字:
0, 1, 8 - 颠倒后会改变的数字:
6 ↔ 9 - 其他数字(2, 3, 4, 5, 7)颠倒后无法形成数字,因此不能出现在这种车牌中。
设车牌号为 d₁ d₂ d₃ d₄ d₅。为了让它颠倒后和原来一样,必须满足以下对称关系:
d₁必须是d₅颠倒后的样子,即d₁ = flip(d₅)。d₂必须是d₄颠倒后的样子,即d₂ = flip(d₄)。d₃必须是自身颠倒后的样子,即d₃ = flip(d₃)。
根据这个结构,我们来确定每个位置的数字有多少种选择:
- 中间位
d₃:必须是颠倒后不变的数字,所以d₃只能是 0, 1, 8 中的一个(共 3 种选择)。 - 第二位
d₂:可以是任何合法的可颠倒数字,即 0, 1, 6, 8, 9(共 5 种选择)。一旦d₂确定,d₄也就唯一确定了(例如,d₂=6则d₄=9)。 - 第一位
d₁:同样可以是 0, 1, 6, 8, 9(共 5 种选择)。d₅也随之唯一确定。
所以,满足“颠倒不变”的 5 位车牌总共有 5 × 5 × 3 = 75 个。
第二步:在这些车牌中筛选能被 3 整除的
一个数能被 3 整除的条件是:各位数字之和能被 3 整除。
车牌的数字之和 S = d₁ + d₂ + d₃ + d₄ + d₅。
根据对称关系,S = (d₁ + flip(d₁)) + (d₂ + flip(d₂)) + d₃。
我们需要 S ≡ 0 (mod 3)。
我们来分析每个组成部分的和除以 3 的余数:
-
对于
d₃:d₃ = 0⇒0 ≡ 0 (mod 3)d₃ = 1⇒1 ≡ 1 (mod 3)d₃ = 8⇒8 ≡ 2 (mod 3)d₃的余数{0, 1, 2}各有 1 种选择。
-
对于
d₁和d₂决定的和d + flip(d):d = 0:0+0=0⇒0 ≡ 0 (mod 3)d = 1:1+1=2⇒2 ≡ 2 (mod 3)d = 6:6+9=15⇒15 ≡ 0 (mod 3)d = 8:8+8=16⇒16 ≡ 1 (mod 3)d = 9:9+6=15⇒15 ≡ 0 (mod 3)- 总结一下,对于
d₁或d₂的选择:- 和的余数为 0 (
d ∈ {0,6,9}): 3 种选择。 - 和的余数为 1 (
d = 8): 1 种选择。 - 和的余数为 2 (
d = 1): 1 种选择。
- 和的余数为 0 (
现在,我们需要组合 d₁、d₂、d₃ 的选择,使得 (d₁+flip(d₁)) + (d₂+flip(d₂)) + d₃ 的和能被 3 整除。设 S₁ = (d₁+flip(d₁)) mod 3, S₂ = (d₂+flip(d₂)) mod 3, S₃ = d₃ mod 3。我们需要 (S₁ + S₂ + S₃) ≡ 0 (mod 3)。
我们分类讨论 (S₁, S₂, S₃) 的余数组合:
0 + 0 + 0:d₁有3种选择,d₂有3种选择,d₃有1种选择。总计3 × 3 × 1 = 9种。1 + 1 + 1:d₁有1种选择,d₂有1种选择,d₃有1种选择。总计1 × 1 × 1 = 1种。2 + 2 + 2:d₁有1种选择,d₂有1种选择,d₃有1种选择。总计1 × 1 × 1 = 1种。0, 1, 2的排列组合 (共 3! = 6 种):(0,1,2):3 × 1 × 1 = 3(0,2,1):3 × 1 × 1 = 3(1,0,2):1 × 3 × 1 = 3(1,2,0):1 × 1 × 1 = 1(2,0,1):1 × 3 × 1 = 3(2,1,0):1 × 1 × 1 = 1
将所有情况相加:
总数 = 9 + 1 + 1 + (3+3+3+1+3+1) = 11 + 14 = 25 种。
结论:
满足条件的车牌共有 25 个。
排列是指从 \(n\) 个不同的元素中取出 \(m \ (m \le n)\) 个元素排成一列的方案数,用符号 \(A_n^m\) 来表示,排列数的计算公式为:\(A_n^m = n (n-1) (n-2) \cdots (n-m+1) = \dfrac{n!}{(n-m)!}\)。
排列数的性质:\(A_n^m = n A_{n-1}^{m-1}\),$A_n^m = m A_{n-1}^{m-1} + A_{n-1}^m $。
选择题:在一场比赛中,有 10 名选手参加,前三名将获得金、银、铜牌。若不允许并列,且每名选手只能获得一枚奖牌,则不同的颁奖方式共有多少种?
- A. 120
- B. 720
- C. 504
- D. 1000
答案
B。这是一个典型的排列问题,因为奖牌(金、银、铜是不同的),所以选手的获奖顺序至关重要。
可以分步计算:
- 金牌:10 名选手中的任意一位可能获得金牌。
- 银牌:金牌得主确定后,还剩下 9 名选手,他们中的任意一位可能获得银牌。
- 铜牌:金、银牌得主都确定后,还剩下 8 名选手,他们中的任意一位可能获得铜牌。
根据乘法原理,将每个位置的可能性相乘,即可得到总的颁奖方式数:\(总方式数 = 10(金牌选择) \times 9(银牌选择) \times 8(铜牌选择) = 720\)。所以,共有 720 种不同的颁奖方式。
选择题:0, 1, 2, 3, 4 中选取 4 个数字,能组成多少个不同四位数(注:最小的四位数是 1000,最大的四位数是 9999)
- A. 96
- B. 18
- C. 120
- D. 84
答案
答案是 A。这是一个排列问题,可以分步计算每个位置上可能有多少种选择。一个四位数有四个位置:千位、百位、十位、个位。
因为是四位数,所以千位不能是 0。因此,千位只能从 1, 2, 3, 4 这 4 个数字中选择。
千位已经用掉了一个数字,现在还剩下 4 个数字(包括 0),所以百位有 4 种选择。
千位和百位已经用掉了两个不同的数字,现在还剩下 3 个数字,所以十位有 3 种选择。
千、百、十位用掉了三个不同的数字,现在还剩下 2 个数字,所以个位有 2 种选择。
根据乘法原理,将每个位置的可能性相乘,即可得到总共能组成的四位数个数:\(4 \times 4 \times 3 \times 2 = 96\)。所以,总共可以组成 96 个不同的四位数。
组合是指从 \(n\) 个不同元素中取出 \(m \ (m \le n)\) 个元素,不考虑顺序,其方案数就是组合数,用符号 \(C_n^m\) 来表示,组合数的计算公式为:\(C_n^m = \dfrac{A_n^m}{A_m^m} = \dfrac{n(n-1)(n-2)\cdots(n-m+1)}{m!} = \dfrac{n!}{m!(n-m)!}\)。
组合数的性质:\(C_n^0 = C_n^n = 1\),\(C_n^m = C_n^{n-m}\),\(C_n^m = C_{n-1}^m + C_{n-1}^{m-1}\),\(C_n^0 + C_n^1 + C_n^2 + \cdots + C_n^n = 2^n\)。
选择题:共有 8 人选修了程序设计课程,期末大作业要求由 2 人组成的团队完成。假设不区分每个团队内 2 人的角色和作用,请问共有多少种可能的组队方案?
- A. 28
- B. 32
- C. 56
- D. 64
答案
这是典型的组合问题。需要从 8 个人中选出 2 个人组成一个团队,由于不区分角色,所以顺序无关。
计算公式为组合数 \(C(n,k) = n! / (k! * (n-k)!)\),其中 \(n\) 是总人数,\(k\) 是团队的人数。
\(C(8, 2) = 8! / (2! * (8-2)!) = 8! / (2! * 6!) = 8*7/(1*2) = 28\)
所以答案选 A。
选择题:从一个 4×4 的棋盘中选取不在同一行也不在同一列上的两个方格,共有多少种方法?
- A. 60
- B. 72
- C. 86
- D. 64
答案
B。
方法一:分步计数法
这种方法直接计算满足条件的选法数量。
一个 4×4 的棋盘共有 16 个方格,所以选择第一个方格有 16 种方法。
根据题意,第二个方格不能与第一个方格在同一行或同一列。假设第一个方格选在某一行,那么这一行剩下的 3 个方格都不能选。假设第一个方格选在某一列,那么这一列剩下的 3 个方格也不能选。除去第一个方格本身,总共有 3 + 3 = 6 个方格被排除。所以,可选的方格数量为 16 - 1 (自身) - 6 (同行同列) = 9 个。因此,选择第二个方格有 9 种方法。
前两步相乘得到 16 × 9 = 144。但这计算的是有序的方格对(例如,先选 A 后选 B,和先选 B 后选 A 被当成了两种情况)。而题目要求的是“选取”两个方格,这是一个组合问题,不考虑顺序。因此,需要将有序对的数量除以 2(即 2!)。总方法数 = (16 × 9) / 2 = 144 / 2 = 72。
方法二:排除法
这种方法先计算所有可能的选法,再减去不满足条件的选法。
从 16 个方格中任意选取 2 个,不考虑任何限制。这是一个组合问题。总选法数 = C(16, 2) = (16 × 15) / (2 × 1) = 120 种。
不满足条件的情况就是“选取的两个方格在同一行”或“在同一列”。棋盘有 4 行,在任意一行(4 个方格)中选取 2 个方格的方法数是 C(4, 2) = (4 × 3) / 2 = 6 种,所以,在同一行的总选法数 = 4 (行数) × 6 = 24 种。同理,棋盘有 4 列,在任意一列中选取 2 个方格的方法数也是 C(4, 2) = 6 种,所以,在同一列的总选法数 = 4 (列数) × 6 = 24 种。不满足条件的总选法数 = 24 + 24 = 48 种。
满足条件的方法数 = 120 - 48 = 72 种。
在标准的集合中,所有元素都是唯一的,例如 \(\{ A,B,C \}\)。
而可重集则允许元素重复出现。例如,单词 MISSISSIPPI 中的字母构成的可重集是 \(\{ M:1, I:4, S:4, P:2 \}\)。
可重集排列问题就是计算一个可重集中的所有元素能组成多少种不同的排列。例如,用单词 MISSISSIPPI 中的所有字母,可以组成多少个不同的字符串?
方法一:除法原理
这是最常用、直接的方法。其核心思想是“先当作全部不同,再除以重复的部分”。
暂时忽略重复元素,假设集合中 \(n\) 个元素都是独一无二的。那么,全排列的数量就是 \(n!\)。
而在上一步中,对相同的元素进行了不必要的区分。例如,4 个 S 被当成了 \(S_1, S_2, S_3, S_4\),它们自身有 \(4!\) 种排列。但实际上这些排列都是同一种情况(都是 SSSS)。因此,需要用总数除以每组相同元素的内部排列数 \(n_i !\) 来消除这种重复计算。
假设总元素个数为 \(n\),其中第 1 种元素有 \(n_1\) 个,第 2 种有 \(n_2\) 个,……,第 \(k\) 种有 \(n_k\) 个。排列总数等于 \(n! / (n_1! \times n_2! \times \cdots \times n_k!)\)。
比如上面这个问题,总字母数 \(n=11\),其中每个字母 \(n_1 = 1, n_2 = 4, n_3 = 4, n_4 = 2\),那么 \(11! / (1! \times 4! \times 4! \times 2!) = 34650\)。
方法二:组合数模型
这种方法将问题看成是“为元素选择位置”的过程。
想象有 \(n\) 个空位排成一排。任务是决定把哪种元素放在哪些位置上。
- 第一步:从 \(n\) 个空位中,为 \(n_1\) 个第一种元素选择 \(n_1\) 个位置
- 第二步:从剩下的空位中,为 \(n_2\) 个第二种元素选择 \(n_2\) 个位置
- 第三步:以此类推,直到所有元素都放好位置。
- 根据乘法原理,将每一步的选择数相乘,就是总的排列数。
排列总数等于 \(C(n, n_1) \times C(n - n_1, n_2) \times C(n-n_1-n_2, n_3) \times \cdots \times C(n_k, n_k)\),其中 \(C(n,k)\) 是组合数,表示从 \(n\) 个元素中选 \(k\) 个的方案数。
对于上面的问题,\(C(11,1) \times C(10,4) \times C(6,4) \times C(2,2) = 34650\)。
选择题:设一个三位数 \(n = \overline{abc}\),其中 a,b,c 均为 1~9 之间的整数,若以 a,b,c 作为三角形的三条边可以构成等腰三角形(包括等边),则这样的 n 有多少个?
- A. 81
- B. 120
- C. 165
- D. 216
答案
C。
需要分两种情况讨论:等边三角形和非等边的等腰三角形。
情况一:构成等边三角形
三条边(即三个数字)完全相等,形式为 \(\{ x,x,x \}\)。此时只要 \(x \gt 0\) 就满足三角形的基本条件,由于 \(x\) 的取值是 1 到 9,此条件恒成立。那么这种情况下有 9 个方案。
情况二:构成非等边的等腰三角形
三条边中有两条相等,另一条不相等,形式为 \(\{ x,x,y \}\),其中 \(x \ne y\)。这时要满足三角形的基本条件,需要 \(x+y \gt x\) 并且 \(x+x \gt y\),也就是 \(0 \lt y \lt 2x\)。
- 当 \(x=1\) 时,\(y \lt 2\),同时 \(x \ne y\),所以有 0 种。
- 当 \(x=2\) 时,\(y \lt 4\),可以是 1,3(不能是 2),所以有 2 种。
- 当 \(x=3\) 时,\(y \lt 6\),可以是 1,2,4,5,所以有 4 种。
- 当 \(x=4\) 时,\(y \lt 8\),可以是 1,2,3,5,6,7,所以有 6 种。
- 当 \(x=5 \dots 9\) 时,\(y\) 可以是除了 \(x\) 外的任意数,各自都有 8 种。
有效边长组合总数等于 \(0+2+4+6+8 \times 5 = 12 + 40 = 52\) 种。
对于每一种 \(\{ x,x,y \}\) 的组合(例如 \(\{ 2,2,1 \}\)),可以排列成 3 个不同的三位数 \(n\)(例如 221, 212, 122),也就是 \(3!/2!\)。因此,非等边的等腰三角形有 \(52 \times 3 = 156\) 种方案。
总计
将两种情况的数量相加得到 165 种。
选择题:由数字 1,1,2,4,8,8 所组成的不同的 4 位数的个数是?
- A. 104
- B. 102
- C. 98
- D. 100
答案
B。
这是一个典型的排列组合问题,涉及到可重复元素。要解决这个问题,最好的方法是根据组成的 4 位数中数字的重复情况进行分类讨论。
给定的数字集合(可重集)为 {1, 1, 2, 4, 8, 8}。
将组成的 4 位数按其数字结构分为三种情况:
情况一:由两组重复数字组成(模式:aabb)
在给定的集合中,只有数字 1 和 8 是重复的。要组成 aabb 模式,必须选择 {1, 1} 和 {8, 8} 这两对。只有 1 种选择方法,即选出的四个数字是 {1, 1, 8, 8}。
对 {1, 1, 8, 8} 这四个数字进行全排列。这是一个可重集排列问题。排列数 = 4! / (2! × 2!) = 24 / (2 × 2) = 24 / 4 = 6 种。
情况二:由一组重复数字和两个不同数字组成(模式:aabc)
第一步选择重复的一对 (aa)。**可以选择 {1, 1} 或者 {8, 8}。有 2 种选择。第二步选择另外两个不同的数字 (b 和 c)。如果选择了 {1, 1},则需要从剩下的不同数字 {2, 4, 8} 中选择两个。方法数为 C(3, 2) = 3 种。如果选择了 {8, 8},则需要从剩下的不同数字 {1, 2, 4} 中选择两个。方法数也是 C(3, 2) = 3 种。因此,选择这组数字的总方法数 = 2 (选择哪对) × 3 (选择哪两个单数) = 6 种组合。(这6种组合分别是: {1,1,2,4}, {1,1,2,8}, {1,1,4,8}, {8,8,1,2}, {8,8,1,4}, {8,8,2,4})
对于每一种 aabc 模式的组合,其排列数也是一个可重集排列问题。排列数 = 4! / 2! = 24 / 2 = 12 种。总数 = 6 (组合数) × 12 (每种组合的排列数) = 72 种。
情况三:由四个完全不同的数字组成(模式:abcd)
在给定的集合中,不同的数字有 {1, 2, 4, 8}。要组成 abcd 模式,我们必须选择这全部四个数字。只有 1 种选择方法。对 {1, 2, 4, 8} 这四个不同的数字进行全排列。排列数 = 4! = 24 种。
最终总计
将以上三种情况的数量相加,得到所有可能的不同 4 位数的个数:总个数 = (情况一) + (情况二) + (情况三) = 6 + 72 + 24 = 102。
容斥原理
容斥原理在组合数学中用来求 \(n\) 个有限集的并集的基数(又称势,即集合元素个数)。设 \(n\) 个有限集分别为 \(S_1, S_2, \dots, S_n\),那么它们的并集的基数可以表示为:\(|S_1 \cup \cdots \cup S_n| = \sum \limits_i |S_i| - \sum \limits_{i \lt j} |S_i \cap S_j| + \sum \limits_{i \lt j \lt k} |S_i \cap S_j \cap S_k| + \cdots + (-1)^{n-1} |S_1 \cap \cdots \cap S_n|\)。
要计算若干个集合并集的基数,可以先将单个集合的基数求和,然后减去任意两个集合交集的基数,再加上任意三个集合交集的基数,再减去任意四个集合交集的基数,依此类推。
选择题:一次期末考试,某班有 15 人数学得满分,有 12 人语文得满分,并且有 4 人语、数都是满分,那么这个班至少有一门得满分的同学有多少人?
- A. 23
- B. 21
- C. 20
- D. 22
答案
A。
设集合 \(M\) 为“数学得满分的学生”的集合,设集合 \(Y\) 为“语文得满分的学生”的集合。
根据题目描述,可以得到:
- 数学得满分的人数,即集合 \(M\) 的大小:\(|M| = 15\)
- 语文得满分的人数,即集合 \(Y\) 的大小:\(|Y| = 12\)
- 语、数都是满分的人数,即集合 \(M\) 和 \(Y\) 的交集的大小:\(|M \cap Y| = 4\)
问题是“至少有一门得满分的同学有多少人”,这等价于求解集合 \(M\) 和 \(Y\) 的并集的大小,即 \(|M \cup Y|\)。
对于两个集合,容斥原理的公式为:\(|M \cup Y| = |M| + |Y| - |M \cap Y|\)。相当于如果简单地将数学满分的人数和语文满分的人数相加,那么那些两门都得满分的同学就被计算了两次(一次在数学里,一次在语文里)。因此,必须减去这部分被重复计算的人数,才能得到至少一门满分的总人数。将已知数值代入公式可以得到结果 23。

浙公网安备 33010602011771号