🎁 当前为 免费试看 内容 · 开通VIP 解锁 CSP-J/S 集训全部六大模块 + 真题模考 + 高分技巧

模拟算法

所属模块 初赛基础算法初赛分值 约 8–12 分出题类型 阅读程序 / 填空难度 ★★★☆☆近5年频次 每年 1–2 题

基础概念

基通俗讲解

“模拟”就是题目让你怎么做,你就怎么写,不追求巧妙,只求准确。绝大多数阅读程序题本质都是模拟,关键是忠实变量追踪。

核心必背考点

背直接默写拿分
  • 步骤:理清“状态变量”→ 按题意逐行翻译 → 输出。
  • 常用:计数器、标志位、临时变量。
  • 阅读程序时把每个变量在每轮的值列成表,最稳。

高频难点 / 拉分考点

难考场极易丢分

模拟题“坑”在边界与顺序:先改后比、先输出后更新、正好 n 次还是 n+1 次。阅读程序务必逐轮演算,别跳步。

出题陷阱

坑文字套路
  • “直到满足某条件停止”易多算/少算一轮。
  • 数组下标与题意编号(从1)不一致时错位。

90分高分技巧

技速算捷径

用“输入输出预判 → 变量追踪表 → 循环边界标记”四步法(详见模块⑤阅读程序法),模拟题基本不丢分。

梯度真题

基础阅读程序累加求和模拟

逐轮加 i。

C++
1int s=0;
2for(int i=1;i<=5;i++) s+=i;
3cout<<s;
▍解析:答案 15。
中档阅读程序找最大值

维护 maxv,遇更大则更新。

C++
1int a[5]={3,7,2,9,5}, mx=a[0];
2for(int i=1;i<5;i++)
3 if(a[i]>mx) mx=a[i];
4cout<<mx;
▍解析:答案 9。
压轴阅读程序约瑟夫简化(每步删一个)

用标志位模拟淘汰。

C++
1int n=5; vector<bool> v(n,true);
2int left=n, cur=0;
3while(left>1){
4 if(v[cur]){ v[cur]=false; left--; }
5 cur=(cur+1)%n;
6}
7for(int i=0;i<n;i++) if(v[i]) cout<<i;
▍解析:答案 幸存者下标(按规则得出)。

记忆口诀

技📌 记忆口诀

“题目怎么讲就怎么写,变量逐轮列成表;边界顺序莫跳步,模拟忠实分不掉。”

📝 本节自测共 6 题

做完点「提交本节自测」即时判分;单选 / 多选 / 填空混合,答错可一键收入错题本。

“模拟算法”的核心思想是?
阅读模拟类程序时,最稳妥的做法是?
模拟题最常见的失分点是?
含 n 个节点的完全二叉树,高度约为 ____(大 O)。(填空) 填空题 中
两层嵌套循环(各 n 次)时间复杂度 O(n²),当 n=100 时约执行 ____ 次。(填空) 填空题 中
下列哪些算法基于“分治”思想?(多选) 多选题 中

🧭 学习路径

📚 前置
(模块起点)
📍 本页
模拟算法
🔜 后继
收藏后可在 错题本 / 收藏页 查看(仅保存在本机浏览器)
📚 本站为 www.xxw123.com 之「CSP-J/S 初赛集训」栏目 ↩ 返回网站首页

📐 公式速查面板

📝 我的笔记

写下你的心得、易错点、口诀…

已输入 0 字 · 仅存本机 ✓ 自动保存