🔢 计数原理
「一共有多少种可能?」——从早餐搭配、车牌号码到食堂菜谱,到处都在数数。数数有两种大力士:一件大事分成几类就相加,分成几步就相乘。学会「分类用加法、分步用乘法」,再多的可能也数得清!
考纲知识点:加法原理
乘法原理
乘法原理
📖
考纲 · 知识点详述
摘自《CCF编程能力等级认证 C++&Python 认证标准》C++ 八级
- (1)掌握计数原理。包括加法原理和乘法原理。
📚
先学一学
花 5 分钟读完下面 4 课,再去闯关就不慌啦
1
🍜 分类用加法:选「其中一类」就完成了
做一件事有几类不同的办法,只要挑任何一类里的任何一种,事情就完成了——那总数就把每类的种数加起来。这叫加法原理。
🥣 例子:选一碗面
食堂有牛肉面 3 种(红烧/番茄/酸菜)、素面 2 种(雪菜/菌菇)。只买一碗面,不管哪种都行,一共有 3 + 2 = 5 种。因为「吃牛肉面」或「吃素面」是两类并列的选择,选一类就完成。
💡 口诀:分类计数用加法,一类里挑一个;「要么吃这个,要么吃那个」→ 加起来。
🚌 行业实际:出行/快递
导航软件显示「到机场有 3 条地铁线、5 条公交线、2 种打车平台」,乘客选一种方式到达 → 加法原理。物流公司统计「今天从仓库发货,走陆运 6 条线或空运 2 条线」→ 也是加法。
2
👕 分步用乘法:每一步「都要做」
做一件事要一步一步完成,每一步都不能少,那总数就把每一步的种数乘起来。这叫乘法原理。
👔 例子:搭配出门
出门要「先穿上衣,再穿裤子」两步:上衣 3 件、裤子 2 条。每一步都做,一共 3 × 2 = 6 种穿法。要是再加 2 双鞋,就是 3 × 2 × 2 = 12 种。
💡 口诀:分步计数用乘法,一步都不能少;「先做什么,再做什么」→ 乘起来。
📱 行业实际:密码和商品
手机锁屏密码是 4 位,每位 0~9 十种:10 × 10 × 10 × 10 = 10000 种。电商一件 T 恤有 3 个颜色、4 个尺码,就生成 3 × 4 = 12 个「SKU」(库存单位),这就是乘法原理在做生意。
3
⚖️ 加法还是乘法?看「能不能少做一步」
🔍 三步判断题
① 这些办法是并列的一类类(选任一即完成)→ 加法;
② 这件事要一步一步做(每步都要做)→ 乘法;
③ 又分类又分步 → 先分步列式,每步内部再分类相加,最后乘起来。
② 这件事要一步一步做(每步都要做)→ 乘法;
③ 又分类又分步 → 先分步列式,每步内部再分类相加,最后乘起来。
🥇 判断题口诀
「要么…要么…」→ 加法;「先…再…」→ 乘法。记住:加法是选一个就完事,乘法是每个都得做。
💡 口诀:分类相加,分步相乘;问「能不能只做一步就完成」——能则加,不能则乘。
⚠️ 常见小坑
如果题目里「某一位不能是 0」「字母不能是 O 和 I」,要先处理受限制的那一位,从它开始数种数,再乘其它位。比如车牌第 5 位必须是数字,就要先把第 5 位定下来。
4
🧮 程序怎么「数」:一枚一枚试出来
💻 读代码:数一数有多少种搭配
看得懂就好,不用背。计算机没有魔法,它把每种可能都「试一遍」再数个数:
int cnt = 0;
for (int x = 0; x <= 10; x++) // 第一位数
for (int y = 0; y <= 10; y++) // 第二位数
if (x + y == 10) cnt++; // 加起来正好 10 就记一次
cout << cnt << endl; // 输出共有几种
for (int x = 0; x <= 10; x++) // 第一位数
for (int y = 0; y <= 10; y++) // 第二位数
if (x + y == 10) cnt++; // 加起来正好 10 就记一次
cout << cnt << endl; // 输出共有几种
双重循环一层套一层,就像把第一个数、第二个数所有的配对都走一遍——本质上就是「分步枚举」:第一步有 11 种,第二步也有 11 种,共 11 × 11 个组合。
🌟 为什么工程师要会数数
做优惠活动前先数「满减方案共几种」;设验证码前先数「够不够发给所有用户」;设计商品规格前先数「SKU 会不会爆炸」。数错了,方案就超预算或做不出来。所以计数原理是算法竞赛和产品设计共同的地基。
🎯
闯关小锦囊 · 考点提醒
- 加法原理:几类并列的办法,选一类就完成 → 各类相加。
- 乘法原理:分步完成、每步都要做 → 各步相乘。
- 又分类又分步:先按「步」列乘法式,每步里「选法种类」如果本身要分类就相加。
- 食堂 4 肉 × 3 切 × 3 配 × 3 辣 → 乘法 4×3×3×3 = 108。
- 高铁/汽车/轮船任选一种 → 加法 10 + 5 + 2 = 17。
- 首位/某位有限制(不能为 0、不能为 O/I)时,先数受限制的那一位。
- 「最多 1 位字母」这类要分类:0 个字母的情况 + 1 个字母的情况分开算再相加。
🎮
学完了?来闯关!
下面 15 个小挑战,点一点就能玩
Demo 原型 · 每个知识点独立页面 · 暂不含真实编译与进度存储。