C++ 竞赛入门
14-总结
快速入门总结
本节学会什么
- 用一套稳定步骤完成一道基础题
- 根据题目选择数据类型、控制结构和数据组织方式
- 发现错误后按输入、过程、输出的顺序检查
为什么需要它
学完语法不等于能独立写题。基础题通常不是缺少某个神奇技巧,而是需要把读题、建模、编码、测试连成稳定流程。这个流程会一直陪伴后续的 CSP/NOIP 学习。
最小可运行示例
下面是“读入 n 个数,输出偶数个数”的完整骨架:
#include <iostream>
int main() {
int n;
std::cin >> n;
int count = 0;
for (int i = 0; i < n; i += 1) {
int x;
std::cin >> x;
if (x % 2 == 0) {
count += 1;
}
}
std::cout << count << '\n';
return 0;
}
它同时使用了输入输出、变量、取余、条件和循环。遇到新题时,先找出“每次读什么、维护什么、最后输出什么”,再选择相应结构。
关键过程与易错点
- 先读题面中的输入、输出、数据范围和样例,再写代码。数据范围决定是否需要
long long、数组或更高效的算法。 - 写前列出变量含义。循环中最重要的是不变信息和会更新的状态,例如
count、sum、minimum。 - 提交前至少检查:最小输入、边界输入、重复数据、答案为零的情况。
- 错误时先确认程序是否读到了正确数据,再输出中间变量检查过程,最后检查格式。不要一开始就大改算法。
- 注释记录思路和边界理由,不要重复
i += 1这类代码表面含义。
动手检查
把最小示例改成统计奇数的和。输入 5 和 1 2 3 4 5,预期答案是 9;再用所有偶数测试答案是否为 0。
从下面的复盘表中任选一个知识点,自己写一个 20 行以内的小程序,不查看旧代码。
| 知识点 | 自测任务 |
|---|---|
| 条件与循环 | 读入若干分数,统计及格人数。 |
| 数组 | 读入一组数,输出最大值和最小值。 |
| 字符串 | 读入一行,统计其中的数字字符数。 |
| 函数 | 把“判断质数”写成 bool 函数。 |
| 递归 | 输出 1 到 n 的所有二进制串。 |
立即练习
| 难度 | 题目 | 题解 | 训练目标 |
|---|---|---|---|
| 基础 | 洛谷 P1047:校门外的树 | 题解 | 数组、循环和条件的综合运用。 |
| 巩固 | 洛谷 P1085:不高兴的津津 | 题解 | 建模日常规则并维护最优答案。 |
| 挑战 | 洛谷 P1789:Mc生存 | 题解 | 使用二维数组模拟并注意边界。 |