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

枚举算法

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

基础概念

基通俗讲解

枚举 = 把所有可能情况一个一个试,满足条件就记录。简单可靠,是初赛“保底得分”的首选思路,尤其当数据范围不大时。

核心必背考点

背直接默写拿分
  • 双层循环枚举两个数 a、b;三层枚举三个数。
  • 配合 if 条件筛选。
  • 复杂度约 O(n²),n≤10³ 可接受。

高频难点 / 拉分考点

难考场极易丢分

枚举范围漏边界:如“1≤a≤b≤n”写成 a<b 会漏掉 a=b 的情况;或整除判断用 a%b==0 时 b 不能为 0。

出题陷阱

坑文字套路
  • “互不相同”的条件易被忽略,导致重复计数。
  • 计数题要判重,别把同一组算多次。

90分高分技巧

技速算捷径

初赛阅读枚举程序,先确定循环上下界与筛选条件,再少量代入几个值验证计数是否正确。

梯度真题

基础求 1~100 中 3 的倍数个数

枚举 i,判 i%3==0。

C++
1int c=0;
2for(int i=1;i<=100;i++)
3 if(i%3==0) c++;
4cout<<c;
▍解析:答案 33。
中档两数之和为定值

枚举 a, b 凑 sum。

C++
1int n=10,sum=10,c=0;
2for(int a=1;a<=n;a++)
3 for(int b=a+1;b<=n;b++)
4 if(a+b==sum) c++;
5cout<<c;
▍解析:答案数出满足 a<b 且 a+b=10 的对数 = 4(1+9,2+8,3+7,4+6)。
压轴百钱百鸡类

三重枚举公鸡/母鸡/小鸡。

C++
1for(int x=0;x<=20;x++)
2 for(int y=0;y<=33;y++){
3 int z=100-x-y;
4 if(z%3==0 && 5*x+3*y+z/3==100) cout<<x<<y<<z;
5 }
▍解析:经典枚举 + 约束筛选。

记忆口诀

技📌 记忆口诀

“可能情形逐个试,条件筛选记心头;上下界要闭区间,互异判重莫遗漏。”

📝 本节自测共 6 题

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

暴力枚举 a,b,c(各 1..n)判断 a+b==c,时间复杂度约? 易
优化枚举常配合 ____ (填两字方法)减少搜索量。 填空题 中
适合用枚举/暴力的情况有?(多选) 多选题 难
关于图的最短路,下列说法正确的有哪些?(多选) 多选题 难
两层嵌套循环(各 n 次)时间复杂度 O(n²),当 n=100 时约执行 ____ 次。(填空) 填空题 中
广度优先搜索 BFS 借助哪种数据结构实现?____(填空) 填空题 易

🧭 学习路径

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

📐 公式速查面板

📝 我的笔记

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

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