2019年第十届蓝桥杯个人解析(JavaB组省赛)

作者分享了参加蓝桥杯竞赛的经历,从省三到省一的转变过程,包括算法学习、刷题策略及比赛实战经验。详细解析了比赛中的典型题目解答思路。

今天成绩出来,省一,也不枉刷了这么多题(3月28更)


去年参加了第九届蓝桥杯,没有系统的学习,当时只知道深度搜索(刚好那年出了一道),挺多不会的最后拿了省三

今年比赛前大概的刷了70+的题目吧,也有系统的去学算法知识和数据结构,比赛做题给我感觉就是比年容易了哈哈哈,可能自己进步了

希望可以拿个省一,不管结果如何,我都要将算法学习放一放的,为实习做准备了

总结一下做题的情况,以下的思路不一定对的,仅为个人的做题思路

题目
第一题

一共有二十个篮球选手,根据每位选手打1 - 5号位的评分表现,选出5个选手,使评分结果最高

热身送分题,在草稿上写一遍就出来结果了,记得我的答案是490

第二题

求子串,测试用例是aaab,一共有7个(好像)不同的子串,最后要求一个由01组成字符串的子串

直接双重for循环暴力所有的结果,加进HashSet中,最后输出HashSet的size,100

第三题

求前三个斐波那契数列,就是fn = fn-1 + fn-2 + fn-2,求f20190324的后4位

一开始我是用BigIntger,发现这个大数都爆了(第一次见),就放弃了,后来做完迷宫之后倒回来想到其实4位之前的数可以不要的,所有每次的结果%10000,答案好像是4659(不记得了)

第四题

用三个整数加起来等于2019,都是三个数整都不能包含x、y(不记得是啥了,不影响思路),问有多少种情况

一开始是我开2019 + 1大小的数组,将不含有下标x、y的设为1,具体方法就是先转String,用String的contains方法判断

因为是填空题,直接三重for循环,输出结果忘了只记得是五位数

第五题

迷宫最短路径,UDLR分别代表上下左右,输出最短的走法,有多种答案则输出最小字典序

一看到迷宫最短路径,直接开始BFS(不会的看我博客嘻嘻,用Java实现迷宫最短路径算法),走的时候记录方向,因为是最小字典序,所以要用贪心,走的顺序是DLRU,走过之后就不能继续走了,就是不能加入队列

第六题

1 - n中含有2 0 1 9数字的整数数量

从这里开始就是编程题了,第一道编程题还是很容易的,直接转String,用contains方法判断

第七题

一串文本中找Alice和Bob,区分大小写,Alice和Bob之间的字符不超过K,问有多少对

我先是将“,”和“.”用空格代替,这样用String方法中的indexOf(“ Alice ”,“”)就不需要区分后缀是逗号还是句号的问题(这里还要去掉感叹号,问号,不过我当时没有想到,大意了),之后就简单了,直接找就可以了

第八题

饿了么,优先级一开始为0,每过单位时间优先级-1,此时有订单不减,反而+2,最低为0,不能是负数,当优先级为5以上时为X状态(忘了),小于3才离开X状态,问经过t单位时间之后,有多少人在X状态

我是直接模拟,不知有没有更快的方法

第九题

后缀表达式
有n个加号,m个减号,n + m + 1个整数,输出最大的结果运算

当时想不起来后缀表达式是什么意思,所以我就是贪心,用sort排序,将最大的加在一起,减去最小的几个,我觉得不对,25分题不会这么简单吧。

第十题

没时间做了,但是我发现我做过类似的,有点可惜

### 第十二届蓝桥杯Java B概述 第十二届蓝桥杯全国软件和信息技术专业人才大于特定时间举办,面向广大编程爱好者以及在校学生。该事旨在促进软件开发技术的发展,培养创新精神和实践能力。 #### 比详情 比通常设置多个竞类别,其中包括但不限于C/C++程序设计、Java软件开发等。参者需按照规定的时间完成若干道算法题目的解答并提交代码作品。对于Java B而言,主要考察的是选手们运用Java语言解决实际问题的能力[^1]。 #### 题目示例 虽然具体到第十二届蓝桥杯Java B的确切题目未能直接提及,但从以往的比模式来看,般会涉及数据结构与算法分析方面的挑战。例如: - **字符串处理** - **数操作** - **动态规划** - **图论基础** 这些类型的题目要求考生具备扎实的基础知识及较强的逻辑思维能力。 #### 解决方案框架 针对上述提到的各种可能遇到的问题类型,可以采用不同的策略来解决问题。以下是基于常见考点的个简单例子——求数中的最大子序和: ```java public class MaxSubArraySum { public static int maxSubArray(int[] nums) { if (nums == null || nums.length == 0){ throw new IllegalArgumentException("Input array cannot be empty"); } int currentMax = nums[0]; int globalMax = nums[0]; for (int i = 1; i < nums.length; ++i){ currentMax = Math.max(nums[i], currentMax + nums[i]); if(currentMax > globalMax){ globalMax = currentMax; } } return globalMax; } public static void main(String[] args) { int[] testArray = {-2, 1, -3, 4, -1, 2, 1, -5, 4}; System.out.println(maxSubArray(testArray)); } } ``` 此段代码实现了寻找连续子数的最大和的功能,这是类典型的动态规划问题解决方案之[^2]。 #### 结果评估标准 评判的标准主要包括以下几个方面: - 正确性:能否得到正确的结果; - 效率:运行时间和空间复杂度是否合理; - 可读性和规范性:变量命名清晰易懂,遵循良好的编码习惯; 为了更好地准备此类竞,建议多做历的真题练习,并深入理解每道题背后的原理和技术要点。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值