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、数组或更高效的算法。
  • 写前列出变量含义。循环中最重要的是不变信息和会更新的状态,例如 countsumminimum
  • 提交前至少检查:最小输入、边界输入、重复数据、答案为零的情况。
  • 错误时先确认程序是否读到了正确数据,再输出中间变量检查过程,最后检查格式。不要一开始就大改算法。
  • 注释记录思路和边界理由,不要重复 i += 1 这类代码表面含义。

动手检查

把最小示例改成统计奇数的和。输入 51 2 3 4 5,预期答案是 9;再用所有偶数测试答案是否为 0

从下面的复盘表中任选一个知识点,自己写一个 20 行以内的小程序,不查看旧代码。

知识点 自测任务
条件与循环 读入若干分数,统计及格人数。
数组 读入一组数,输出最大值和最小值。
字符串 读入一行,统计其中的数字字符数。
函数 把“判断质数”写成 bool 函数。
递归 输出 1n 的所有二进制串。

立即练习

难度 题目 题解 训练目标
基础 洛谷 P1047:校门外的树 题解 数组、循环和条件的综合运用。
巩固 洛谷 P1085:不高兴的津津 题解 建模日常规则并维护最优答案。
挑战 洛谷 P1789:Mc生存 题解 使用二维数组模拟并注意边界。