资讯动态

2021蓝桥杯Java B组省赛第一场十道真题逐题精讲

发布时间:2026/10/7 1:26:48 来源:尧图企业网站定制
2021年4月18日那场蓝桥杯省赛Java 大学B组第一场的十道题到现在仍然是很多人刷题清单里的必做卷。这套省赛真题值得反复过是因为它把填空题的计算量、数论里的约数枚举、图论的建图与最短路、动态规划的状态设计还有大规模数据下的算法优化全都均匀地铺在了十道题里。你要是能不看题解独立把这一场从头做到尾省赛B组常见的套路基本就过了一遍。下面我按题号 A 到 J 一道道拆包含我自己的思路、能直接跑的 Java 代码、参数上的取舍理由以及当年现场踩过、后来复盘才想明白的坑。刚学完 Java 基础语法想找套真题练手的同学可以只挑前六题已经刷过几十道题的可以重点看后面四道大题的优化。所有代码都是标准输入输出直接丢进评测机就能跑。1. 先把卷面摸清楚150分怎么分布蓝桥杯 Java 大学B组省赛的满分是 150 分十道题按难度递增给分。第一场这套卷子的分值分布是A 到 E 是填空题结果填空不用提交代码每题 5 到 15 分F 到 J 是编程题每题 15 到 25 分。这个结构意味着一个很现实的策略填空题哪怕敲代码暴力算也基本能拿满编程题则要按测试点分档拿分。1.1 十道题的题型地图先把题号和考点列出来这张表建议存下来复习的时候对着看。题号题目分值核心考点参考答案AASC5字符编码76B卡片5模拟 / 数位统计3181C直线10枚举 去重斜率截距40257D货物摆放10约数枚举 三重循环2430E路径15最小公倍数建图 最短路10266837F时间显示15取模 格式化输出按输入输出G砝码称重20三态背包 DP按输入输出H杨辉三角形20组合数 二分按输入输出I双向排序25单调栈 两端填充按输入输出J括号序列25计数 DP 拆分子问题按输入输出前十题里A、B、F 属于「送分但不能错」C、D、E、G、H 属于「有明确套路的中档」I、J 是拉开差距的两道。这个梯度很典型刷题的时候可以按这个分组去练。1.2 为什么第一场的题比第二场更值得先刷同一个知识点不同场次的考法会不一样。第十二届 Java B 组第一场的特点在于它把「优化」这件事的入口放得很明显但门槛藏得很隐蔽。比如 I 题双向排序n 和 m 都是 10 万级别你要是老老实实每次排序都调Arrays.sort复杂度直接 O(m·n log n)能过的测试点非常少但题面又给了一个强提示——初始序列是 1 到 n 的升序排列。这个「初始有序」的条件就是整道题的钥匙。再比如 J 题括号序列看起来是个「最少添加括号 计数」的组合问题其实官方解法把它拆成了两个完全独立、可以分别用线性 DP 求解的子问题再把两个结果乘起来。这种「看起来要一起做、其实可以拆开做」的思路在省赛里反复出现练一遍就能迁移到别的题上。1.3 时间分配上的一个实用建议省赛是 4 小时十道题。我自己的节奏是前 60 分钟必须把 A 到 F 全部拿下并检查一遍剩下的 3 小时全砸在 G 到 J 上。原因很直接——前面六题的总分是 65 分占了一半不到但拿满的确定性接近 100%后面四题一共 85 分每道题都可能有「暴力能过一部分、正解才能满分」的分档。先把确定的分揣兜里再去啃不确定的心理压力会小很多也不会出现「难题没做出来、简单题手滑算错」的惨案。还有一个细节填空题不许提交代码只填答案所以你算出来的数字一定要用第二种方法复核。我见过太多人在 B 题卡片上写完循环就交了结果循环边界写成了还是自己都没想清楚。2. 填空题手算 代码双验证填空题在整个卷子里性价比最高因为可以用任意手段求解——手推、写程序暴力、甚至查资料都行只看最后那个数字对不对。但正因为没有过程分翻车也翻得最彻底。2.1 ASC送分题里藏着的字母序坑这题问的是已知大写字母 A 的 ASCII 码是 65那么大写字母 L 的 ASCII 码是多少。答案 76。推理很简单A 是第 1 个字母对应 65B 是 66以此类推L 是第 12 个字母65 (12 - 1) 76。但踩坑点在这里很多人会心算成 65 12 77忘了索引从 0 偏移。写代码验证只要一行public class Main { public static void main(String[] args) { System.out.println((int) L); // 输出 76 } }提示凡是「第 n 个字母对应多少」这类问题先在纸上写 A65、B66、C67 三个真实值对齐一次确认偏移量是 n-1 而不是 n再动手算。这题真正的价值不在它本身而在于提醒你第一题最容易因为轻敌丢分。省赛开考后的前五分钟人还没进入状态看到这种题容易直接凭感觉填。2.2 卡片从 1 数到 3181数字 1 到底用了几张题目大意是手里有 0 到 9 的卡片各 2021 张从 1 开始一个一个往下拼数1、2、3……每拼一个数卡片就被消耗问最多能拼到多少。答案是 3181。这题本质是问从 1 到 n数字 1 一共出现了多少次第一次超过 2021 时 n 是多少。为什么盯住 1因为从 1 开始连续数1 出现的频率通常最高瓶颈一定出现在它身上。最稳的做法是直接模拟public class Main { public static void main(String[] args) { int[] cnt new int[10]; for (int i 0; i 10; i) cnt[i] 2021; int n 0; outer: while (true) { n; int t n; while (t 0) { int d t % 10; if (--cnt[d] 0) { System.out.println(n - 1); // 这个数拼不出来 break outer; } t / 10;

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑