Files
project1/第07课-数组运算/教案-学生版.md

172 lines
4.4 KiB
Markdown
Raw Permalink 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.
# 第9课数组计数法学生版
## 教学目标
- 理解“数值作下标、次数存数组”的计数思想
- 掌握数组计数的核心写法
- 能用计数数组完成频次统计、最高频查找和去重升序输出
- 知道数组计数法的适用条件和下标范围限制
## 核心考点:数值映射为下标的数组计数思想
### 考什么
统计整数的出现次数寻找最高频数字或完成________和有序输出。
### 必须理解
用数组下标 x 表示________`cnt[x]` 表示________。每读到一次 x就执行________。数组大小必须覆盖题目给出的全部________。
### 核心写法
```cpp
int cnt[________] = {};
for (int i = 0; i < n; i++) {
int x;
cin >> x;
____________________;
}
for (int i = 0; i <= 100; i++) {
if (____________________) cout << i;
}
```
### 常见错误
- 范围是0100时数组为什么要开101________________
- 计数数组为什么必须清零________________
- 负数能否直接作为数组下标________
### 判断是否掌握
- [ ] 我能根据数据范围确定数组大小。
- [ ] 我能解释下标与计数值分别代表什么。
- [ ] 我能用计数数组完成频次或去重任务。
---
## 课前认识:什么是数组计数法
如果输入的数字都在 `0~100` 之间,可以准备一个 `cnt[101]` 数组。
- 数字 `x` 对应数组下标________
- `cnt[x]` 保存________________
- 每读到一个数字 x执行________________
---
## 课堂编程题
### 课堂1成绩频次表【适中】
**题目描述:** 输入若干名学生的成绩,按分数从小到大输出每个出现过的分数及人数。
**输入格式:** 第一行输入学生人数;第二行输入每名学生的成绩。
**输出格式:** 每行输出一个出现过的分数和对应人数。
**数据范围:** 学生人数为 11000成绩为 0100。
**输入样例:**
```text
6
80 90 80 75 90 80
```
**输出样例:**
```text
75 1
80 3
90 2
```
**解题思路:** 分数可直接作为下标;每读到一个分数,对应计数加一,最后从 0 遍历到 100。
**易错提醒:** 允许分数 100所以数组至少需要 101 个位置。
---
### 课堂2最受欢迎的号码【适中】
**题目描述:** 输入若干个 150 的号码,输出出现次数最多的号码及次数;若并列,输出较小号码。
**输入格式:** 第一行输入号码总数;第二行输入所有号码。
**输出格式:** 输出最受欢迎的号码及其出现次数。
**数据范围:** 号码总数为 11000。
**输入样例:**
```text
7
8 3 8 5 3 8 3
```
**输出样例:**
```text
3 3
```
**解题思路:** 先计数,再从小到大打擂台;只有次数严格更多才更新,便能保留并列时较小号码。
**易错提醒:** 更新条件不能写大于等于,否则并列时会留下较大号码。
---
### 课堂3去重并升序输出【适中】
**题目描述:** 输入若干个 0100 的整数,去掉重复数字并升序输出,同时输出不同数字的个数。
**输入格式:** 第一行输入整数数量;第二行输入所有整数。
**输出格式:** 第一行输出不同数字的个数;第二行升序输出不同数字。
**数据范围:** 整数数量为 11000。
**输入样例:**
```text
8
4 2 4 1 2 9 1 5
```
**输出样例:**
```text
5
1 2 4 5 9
```
**解题思路:** 计数后从小到大遍历下标,次数大于 0 就输出一次并增加不同数字个数。
**易错提醒:** 下标从小到大遍历时,答案天然有序。
---
### 课堂4温度统计【适中】
**题目描述:** 输入若干个 -2050 的整数温度,输出每个出现过的温度及次数,并输出出现次数最多的温度;并列取较低温度。
**输入格式:** 第一行输入记录数量;第二行输入所有温度。
**输出格式:** 先按温度从低到高输出频次表,最后一行输出最高频温度。
**数据范围:** 记录数量为 11000。
**输入样例:**
```text
6
-2 0 -2 3 0 -2
```
**输出样例:**
```text
-2 3
0 2
3 1
BEST -2
```
**解题思路:** 温度加 20 后映射到 070输出和比较时再把下标减 20 还原。
**易错提醒:** 负数不能直接作为数组下标;映射和还原必须使用相同偏移量。
---
## 课后作业
> 请完成本课对应的课后作业,见编程题文件。