Files
project1/第09课-枚举模拟/教案-学生版.md

146 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第8课枚举与模拟三级工具降维
> 等级说明:本课使用三级工具帮助解决一级、二级综合问题。
## 教学目标
- 理解枚举算法的核心思想:列举所有可能,逐一验证
- 掌握枚举优化的两个技巧:缩小范围、提前终止
- 理解模拟算法的核心思想:按题目描述一步步翻译成代码
## 核心考点:枚举范围与模拟执行顺序
### 考什么
枚举所有可能并逐一________或按题目规则一步一步更新________。
### 必须理解
枚举三步是确定________、确定合法________、写出验证________。模拟时必须保持题目规定的________顺序。是否使用 `break`取决于题目要________________。
### 核心写法
```cpp
for (int i = ________; i <= ________; i++) {
if (____________________) {
// 记录、计数或输出
}
}
for (int i = 1; i <= ________; i++) {
// ____________________
}
```
### 常见错误
- 枚举范围漏掉端点会怎样________________
- 什么情况下不能找到答案就 `break`________________
- 模拟步骤颠倒是否会影响答案________
### 判断是否掌握
- [ ] 我能确定候选变量和完整范围。
- [ ] 我能写出验证条件。
- [ ] 我能按正确顺序模拟状态变化。
---
## 课堂编程题
### 课堂1鸡兔同笼【适中】
**题目描述:** 笼中只有鸡和兔。输入头数与脚数,输出鸡和兔的数量;没有合法方案时输出 `NONE`
**输入格式:** 输入动物总数和脚的总数。
**输出格式:** 输出鸡的数量和兔的数量,或输出 `NONE`
**数据范围:** 动物总数为 11000脚数为非负整数。
**输入样例:**
```text
10 28
```
**输出样例:**
```text
6 4
```
**解题思路:** 枚举鸡的数量,兔的数量由总数减去鸡数得到,再验证脚数。
**易错提醒:** 枚举范围必须包含 0 和动物总数;题目只需一个方案,找到后可以结束循环。
### 课堂2硬币组合【适中】
**题目描述:** 用 1 元、2 元和 5 元硬币凑出指定金额,要求硬币总数固定。输出所有方案,每行依次输出三种硬币数量。
**输入格式:** 输入目标金额和硬币总数。
**输出格式:** 输出全部合法方案;没有方案时输出 `NONE`
**数据范围:** 目标金额和硬币总数均为 1100。
**输入样例:**
```text
10 4
```
**输出样例:**
```text
1 2 1
```
**解题思路:** 枚举 1 元和 2 元硬币数量5 元硬币数量由总数直接计算,再检查金额。
**易错提醒:** 第三种硬币无需再枚举;题目要求全部方案,找到后不能提前结束。
### 课堂3斐波那契数列【适中】
**题目描述:** 数列前两项为 1之后每项等于前两项之和。输入项数输出前若干项。
**输入格式:** 输入需要输出的项数。
**输出格式:** 输出数列前若干项,以空格分隔。
**数据范围:** 项数为 145。
**输入样例:**
```text
6
```
**输出样例:**
```text
1 1 2 3 5 8
```
**解题思路:** 用两个变量保存连续两项;先计算下一项,再按顺序更新两个变量。
**易错提醒:** 更新顺序不能颠倒,必须先用旧值计算下一项。
### 课堂4交通灯状态【适中】
**题目描述:** 交通灯按"绿灯 30 秒、黄灯 5 秒、红灯 25 秒"循环。第 1 秒为绿灯。输入秒数,输出当时颜色以及该颜色已经持续的秒数。
**输入格式:** 输入一个正整数,表示经过的秒数。
**输出格式:** 输出颜色和当前颜色已持续的秒数。
**数据范围:** 秒数不超过十亿。
**输入样例:**
```text
34
```
**输出样例:**
```text
YELLOW 4
```
**解题思路:** 一个周期共 60 秒,将时间映射到 160再按三个区间判断。
**易错提醒:** 第 60 秒仍在本周期,第 61 秒才回到绿灯第 1 秒。
---
## 课后作业
> 请完成本课对应的课后作业,见编程题文件。