2025年第十六届蓝桥杯省赛JavaB组真题回顾
第16届蓝桥杯省赛已经结束了,第一次参加也是坐牢了4个小时,现在还是来总结一下吧(先声明以下的解法,大家可以当作一种思路来看,解法不一定是正解,只是给大家提供一种能够正常想到的思路吧)
试题A:逃离高塔

本题其实没有什么难度,就是一个循环遍历即可,那么唯一需要注意的就是循环遍历的过程中,int是会爆的,这里需要用long来进行存储
public class Main{public static void main(String[] args){int ans=0;//记录最终答案for(long i=1;i<=2025;i++){long x=i*i*i;if(n%10==3){ans++;}}System.out.println(ans);}
}
最后进行的答案就是:202
试题B:消失的蓝宝

这题其实也是循环遍历即可,但是我们不能一个数一个数的去试,如果一个一个去遍历的话,好像是要跑2小时是可以跑出来,那么通过题目我们可以发现:
- N+20250412要能够被20240413整除
- N+20240413要能够被20250412整除
上述表达式我们可以理解为,这个数一定是20240413的倍数,并且可以发现20250412比20240413是要大9999,那么我们可以设一个数 n1 初始为20240413,然后循环从20240413开始遍历,n1 每次都加上一个20240413(因为最后的结果一定是20240413的倍数,所以其他数就没有必要一个一个去遍历了),然后再循环中我们定义 n2=n1-9999,然后判断如果当前的 n2%20250412==0?(我们每次加的都是20240413,这个数肯定是20240413的倍数,则无需再判断n1%20240413==0?),如果等于0那么再减去一个20250412就是最终答案!(因为我们是第一个表达式为基准的,所以要减去一个20250412)
public class Main{public static void main(String[] args){for(long n1=20240413L;n1<Long.MAX_VALUE;n1+=20240413){long n2=n1-9999;//判断if(n2%20250412==0){System.out.println(n1-20250412);break;}}}
}
最终答案就是:409876661809331
试题C:电池分组



这题就是一个位运算判断:要求将若干个数分为2组数字,那么这两组数字的异或和结果一样的话,一定是等于0的,这是为啥呢?举个例子:
例如样例的 1 2 3,1和2进行异或和后是3,那么3^3不就是0吗?所以我们只需要遍历一遍数组看看最后的异或结果是不是0即可(偷偷抱怨:这题这是太可惜了,考前1周都在学动态规划,考场看到这题还以为是01背包的选与不选的变种问题,最后还没写出来!!!)
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan=new Scanner(System.in);int t=scan.nextInt();while(t-->0){int n=scan.nextInt();int ans=0;for(int i=0;i<n;i++){ans^=scan.nextInt();}if(ans==0){System.out.println("YES");}else{System.out.println("NO");}}}
}
试题D:魔法科考试


这题的考点就是判断素数的问题,其实就是两个循环遍历两个数组然后判断条件是否成立(需要的注意的是,这里会重复计算条件成立的同一个数,那么应该Set来过滤重复的数),再一个就是性能的问题,这里的数据是20000,如果使用朴素方法判断一个数是不是素数,那么最坏情况的时间复杂度就是n*m*log(a[i]+b[j]),这个时间复杂度是决定会超时的,在洛谷上这个时间复杂度是只能过8个案例的,所以我们应该提前筛好素数,然后在O(1)的时间复杂度判断是不是素数!(考场上我也没注意,使用的就是朴素的判断素数,这题也是拿不满的,可惜!!!)
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;public class Main{static int[]prime=new int[20005];static boolean st[]=new boolean[20005];static int cnt=0;static Set<Integer> set=new HashSet<>();static int num;public static void main(String[] args){Scanner scan=new Scanner(System.in);int n=scan.nextInt();int m=scan.nextInt();int []a=new int[n];int []b=new int[m];for(int i=0;i<n;i++){a[i]=scan.nextInt();}for(int i=0;i<m;i++){b[i]=scan.nextInt();}num=n+m;//筛素数creat();//遍历枚举int ans=0;//记录最终答案for(int i=0;i<n;i++){for(int j=0;j<m;j++){int s=a[i]+b[j];if(s<=num){//判断是不是素数if(set.contains(s)){ans++;set.remove(s);}}}}System.out.println(ans);}public static void creat(){//这是只需要筛选出num以内的素数即可,因为超过num的素数我们根本判断不到for(int i=2;i<=num;i++){if(!st[i]){prime[cnt++]=i;set.add(i);}for(int j=0;j<cnt;j++){if(i*prime[j]>num)break;st[i*prime[j]]=true;if(i%prime[j]==0)break;}}}
}
试题E:爆破


本题的核心就是在于,如何知道两个圆的最短距离:两个圆心之间的距离减去两个圆各自的半径,如果<=0那么就是相交的,如果不是那么就不是相交的
画图分析:(画图画的不好请见谅)


import java.util.Scanner;public class Main{static int g[][];public static void main(String[] args) {Scanner scan=new Scanner(System.in);int n=scan.nextInt();g=new int[n+1][3];for(int i=1;i<=n;i++){g[i][0]=scan.nextInt();g[i][1]=scan.nextInt();g[i][2]=scan.nextInt();}//创建n*n的表格double dp[][]=new double[n+1][n+1];//dp[i][j]表示第i个圆和第j个圆之间的距离double ans=0;//存放最后答案for(int i=1;i<=n;i++){double min=Double.MAX_EXPONENT;//寻找当前圆和其他圆的最小距离for(int j=1;j<=n;j++){//判断第i个圆和第j个圆的距离//先判断是不是自身if(i==j){dp[i][j]=Double.MAX_EXPONENT;//因为我们最后要求一个最小的值,所以这里赋最大值}else{dp[i][j]=func(i,j);}min=Math.min(min,dp[i][j]);}ans+=min;}System.out.printf("%.2f",ans);}//判断距离public static double func(int i,int j) {//如果横坐标相同,直接判断纵坐标距离if(g[i][0]==g[j][0]){int len=Math.abs(g[i][1]-g[j][1]);//得到两个圆心的距离,再减去两个半径len=len-(g[i][2]+g[j][2]);//判断是不是小于0.小于0就是相交的,距离就是0return len<=0?0:len;}//如果纵坐标相同,直接判断横坐标的距离if(g[i][1]==g[j][1]){int len=Math.abs(g[i][0]-g[j][0]);//得到两个圆心的距离,再减去两个半径len=len-(g[i][2]+g[j][2]);//判断是不是小于0.小于0就是相交的,距离就是0return len<=0?0:len;}//此时是横纵坐标都不在一条线上,需要利用横纵坐标来结合勾股定理来得到两个圆心的距离//我们以直角为基准,求两个临边的长度,然后通过勾股定理来求出对边(斜边)的长度int lenx=Math.abs(g[i][0]-g[j][0]);int leny=Math.abs(g[i][1]-g[j][1]);//勾股double len=Math.sqrt(lenx*lenx+leny*leny);//此时得到两个圆心的位置,然后再减去两个圆的半径len=len-(g[i][2]+g[j][2]);return len<=0?0:len;}
}
试题F:数组翻转


本题呢本质上来说就是找两个最大的连续区间,暴力+优化
根据样例分析:
4 4 3 3 2 1 3 以样例为例就是最后变成4 4 3 3 3 1 2
那我们可以拓展一下 4 4 3 3 2 1 3 3 4 4 4
那就是4 4 4 4 4 3 3 1 2 3 3
我们会发现翻转的最佳效果是把连续并且相同的数最大的和第二大的合并在一起
以下代码是暴力解法可能是会超时的(如果后续有更好的想法再做更新吧)
import java.util.Scanner;public class Main{static boolean st[];//判断当前数是不是查找过public static void main(String[] args) {Scanner scan=new Scanner(System.in);int n=scan.nextInt();int[]a=new int[n];int max=0;for(int i=0;i<n;i++){a[i]=scan.nextInt();max=Math.max(a[i],max);}st=new boolean[max+1];long ans=0;//记录最终答案for(int i=0;i<n;i++){if(st[a[i]])continue;//此时说明当前数判断过了int max1=0;//记录第一长的区间长度int max2=0;//记录第二长的区间长度int cnt=0;for(int j=i;j<n;j++){if(a[j]==a[i]){cnt++;}else{//如果不是,那么我们记录一下之前的长度if(cnt>max1){max2=max1;max1=cnt;}else if(cnt>max2){max2=cnt;}cnt=0;}}if(cnt!=0){if(cnt>max1){max2=max1;max1=cnt;}else if(cnt>max2){max2=cnt;}}st[a[i]]=true;//此时统计两个最长区间ans=Math.max(ans,1l*a[i]*(max1+max2));}System.out.println(ans);}
}
试题G:2的幂

本题暂时没有什么好的思路就先:略(如果有佬有想法可以评论在评论区)
...
试题H:研发资源分配

这题读完题目感觉就是一个全排列求最大价值问题,但是直接dfs肯定是会超时的(只能过20%的案例),所以可以试试贪心策略,为了使 A 部门获得的资源尽可能多,B 部门获得的资源尽可能少,每天都让 A 部门提交比 B 部门当天提交等级刚好大 1 的等级(如果存在),如果没有更大的等级,就选择最小的等级,避免资源作废。如果都选择不了,那么就只能判断相等的数能不能相互抵消了
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] b = new int[n];for (int i = 0; i < n; i++) {b[i] = scanner.nextInt();}boolean[] used = new boolean[n + 1];int sumA = 0;int sumB = 0;for(int i=0;i<n;i++){//找出当前只比b[i]大一个的数int index=-1;//默认没找到int max=Integer.MAX_VALUE;for(int j=1;j<=n;j++){if(j>b[i] && !used[j]){//此时是找到了index=j;used[j]=true;sumA+=i+1;break;}}//判断有没有找到if(index==-1){//此时说明没有找到,那么我们找最小的数for(int j=1;j<=n;j++){if(j<b[i] && !used[j]){//此时是找到了index=j;used[j]=true;sumB+=i+1;break;}}}//此时判断等于的情况if(!used[b[i]] && index==-1){//此时可以找到相同的sumA+=0;sumB+=0;used[b[i]]=true;}}System.out.println(sumA-sumB);}
}
总结
本次蓝桥杯相对前几届来说算法考的其实不多,主要还是逻辑思维问题, 我在考场上也只是做了一个填空和一个大题,大一第一次参加还是经验不够,总想着这题暴力肯定超时不愿意去写,一直坐在那里思考正解,但是这是非常不对的,我们应该先从暴力解开始优化才对,好歹写了还有一点分,再加上第一次参加肯定还是会紧张的,只能说明年继续努力吧!!!等到后面蓝桥云课加入了今年的题目,大家可以试试上述代码能通过几个案例哈(如果上述题解大佬们有更好的想法欢迎在评论区留言!!!)
相关文章:
2025年第十六届蓝桥杯省赛JavaB组真题回顾
第16届蓝桥杯省赛已经结束了,第一次参加也是坐牢了4个小时,现在还是来总结一下吧(先声明以下的解法,大家可以当作一种思路来看,解法不一定是正解,只是给大家提供一种能够正常想到的思路吧) 试题…...
Android 接口定义语言 (AIDL)
目录 1. 本地进程调用(同一进程内)2. 远程进程调用(跨进程)3 `oneway` 关键字用于修改远程调用的行为Android 接口定义语言 (AIDL) 与其他 IDL 类似: 你可以利用它定义客户端与服务均认可的编程接口,以便二者使用进程间通信 (IPC) 进行相互通信。 在 Android 上,一个进…...
c# 数据结构 链表篇 有关双向链表的一切
本人能力有限,如有不足还请斧正 目录 0.双向链表的好处 1.双向链表的分类 2.不带头节点的标准双向链表 节点类:有头有尾 链表类:也可以有头有尾 也可以只有头 增 头插 尾插 删 查 改 遍历 全部代码 3.循环双向链表 节点类 链表类 增 头插 尾插 删 查 遍历…...
Debian服务器挂载外部存储设备的完整指南
在 Debian 系统中挂载外部存储设备(如 U 盘、移动硬盘、SSD)是服务器运维和桌面使用中非常常见的操作。本文将为你详细拆解从识别设备、格式化到手动/自动挂载的全过程,适合新手到进阶用户参考。 一、准备阶段:插入存储设备并识别 1. 插入外部设备后查看…...
660 中值定理
文章目录 前言168169170总结 前言 background music: 《代替》 张叶蕾 660 上面没有专门的中值定理章节,我蒙了。不过应该可以找一下。就是证明题,标志性应该还行。找一下。然后做一下。660 的题质量应该还是非常高的。但是积分中值定理,还有…...
Elasticsearch:AI 助理 - 从通才到专才
作者:来自 Elastic Thorben Jndling 在 AI 世界中,关于构建针对特定领域定制的大型语言模型(large language models - LLM)的话题备受关注 —— 不论是为了更好的安全性、上下文理解、专业能力,还是更高的准确率。这个…...
数据结构——布隆过滤器
目录 一、什么是布隆过滤器? 二、布隆过滤器的原理 三、布隆过滤器的特点 一、什么是布隆过滤器? 布隆过滤器是一种空间效率高、适合快速检索的数据结构,用于判断一个元素是否可能存在于一个集合中。它通过使用多个哈希函数和一个位数组来…...
时间的重构:科技如何重塑人类的时间感知与存在方式
时间是人类认知的基石,也是科技发展的终极命题。从石英钟到量子计时器,从日晷到区块链时间戳,技术不断重构着我们对时间的理解与利用。然而,当人工智能、量子计算和脑机接口等前沿技术开始挑战时间的线性本质时,我们不…...
悄悄话识别、 打电话识别、攀高识别三种识别算法
在摄像头正对场景下,悄悄话识别(唇语识别)、打电话识别和攀高识别是三种典型的行为检测技术。以下从技术原理、算法模型、应用场景及挑战等方面进行详细分析: 一、悄悄话识别(唇语识别) 技术原理 唇语识别通过分析嘴唇的几何特征(形状、开合程度、运动轨迹)和动态变化…...
docker多架构镜像构建
docker多架构镜像构建 Docker 多架构镜像构建(Multi-Architecture Image Build)允许你为不同平台(如 linux/amd64, linux/arm64, linux/arm/v7 等)构建和推送统一的镜像标签,解决在不同硬件架构之间部署的问题。 Doc…...
机器学习常用算法总结
1. 概述 机器学习的定义是对于某类任务T和性能度量P,如果一个计算机程序在T上其性能P随着经验E而自我完善,那么我们就称这个系统从经验E中学习,机器学习是人工智能的一种方法,它通过在大量数据中学习隐藏的规则,模式和…...
软件架构设计:MVC、MVP、MVVM、RIA 四大风格优劣剖析
MVC、MVP、MVVM 和 RIA 都是软件架构中常见的设计风格,以下是对它们的详细介绍: 一、MVC 架构风格(Model - View - Controller) 1.简介:MVC 架构风格将软件应用程序分为三个核心部分,通过这种划分来分离不…...
Android12 自定义系统服务
在Android中可以通过两种方式创建系统服务: 由SystemServer启动的系统服务,使用SystemServer线程资源,适合轻量级的服务,比如各种XMS服务;占用独立进程,在系统启动时,由init进程拉起,比如SurfaceFlinger;本文采用的是第一种方式。 自定义AssistantManagerService 参…...
Flink SQL SavePoint最佳实践
以下是 Flink SQL Savepoint 最佳实践,涵盖配置、触发、恢复及注意事项,高效管理作业状态: 一、Savepoint 的配置与触发 1. 基础配置 存储路径:在 flink-conf.yaml 中全局设置 Savepoint 存储目录,避免每次手动指定路…...
【STM32】在FreeRTOS下使用硬件SPI收发数据出现的时序耦合问题(WK2124芯片为例)
问题 STM32中在Freertos使用SPI通讯芯片 WK2124进行SPI转4串口时,接收数据为一个任务,发送数据为一个任务,切接受任务优先级更高实测发现收发一段时间(约几分钟)外扩芯片会死锁导致WK2124复位。 分析 首先ÿ…...
关于香橙派OrangePi 5 Ultra 这个开源板子,开发Android
我下载了它资料中的开源Android13 系统SDK, 这个SDK连个git 都没有,把这种代码释放能称为开源吗?? 并且也就是说你买了这个板子,里面是没有任何关于RK3588的开发文档,如果你没玩过其他RK平台,估…...
ubuntu启动 Google Chrome 时默认使用中文界面,设置一个永久的启动方式
方法 :通过桌面快捷方式设置 编辑 Chrome 的桌面快捷方式: 找到您的 Google Chrome 快捷方式文件。如果是通过菜单启动,通常会在以下路径找到与 Chrome 相关的 .desktop 文件: sudo vim /usr/share/applications/google-chrome.d…...
字节跳动开源 Godel-Rescheduler:适用于云原生系统的全局最优重调度框架
背景 在云原生调度中,一次调度往往无法解决所有问题,需要配合重调度来优化资源分配和任务摆放。传统的重调度框架主要集中在识别异常节点或任务,并通过迁移或删除来解决。然而,这些框架往往只能解决局部问题,无法提供…...
WINUI——Background小结
在 WinUI/UWP XAML 中,Background(或其他颜色属性)支持 多种颜色表示方式,包括以下三种主流格式: 1. RGB 十六进制(不透明) 格式:#RRGGBB特点…...
Oracle数据库数据编程SQL<01. 课外关注:数据库查重方法全面详解>
查重是数据库管理和数据分析中的常见需求,以下是各种查重方法的全面总结,涵盖不同场景和技术手段。 更多Oracle学习内容请查看:Oracle保姆级超详细系列教程_Tyler先森的博客-CSDN博客 目录 一、基础SQL查重方法 1. 使用GROUP BY和HAVING …...
开源技术如何助力中小企业实现财务管理自主化?
中小企业的数字化困境与开源机遇 国际数据公司(IDC)研究显示,全球67%的中小企业因高昂的软件成本和僵化的功能设计,未能有效推进数字化转型。传统商业软件常面临三大矛盾: 功能冗余与核心需求缺失:标准化系…...
边缘计算与隐私计算的融合:构建数据经济的“隐形护盾“
在数据成为核心生产要素的今天,边缘计算与隐私计算的交汇正在重塑技术生态。这并非简单的技术叠加,而是一场关于数据主权、算力分配与信任机制的深度博弈。本文将从"数据流动的拓扑学"视角,探讨二者融合如何重构数字社会的基础设施…...
【大模型实战篇】--阿里云百炼搭建MCP Agent
MCP协议(Model Communication Protocol,模型通信协议)是大语言模型(LLM)与外部系统或其他模型交互时的一种标准化通信框架,旨在提升交互效率、安全性和可扩展性。 目录 1.阿里云百炼--MCP 1.1.MCP 服务接…...
基于PySide6与pycatia的CATIA智能倒角工具开发全解析
引言:工业设计中的倒角革命 在机械设计领域,倒角操作是零件加工前的必要工序。传统手动操作效率低下且易出错本文基于PySide6pycatia技术栈,提出一种支持批量智能倒角、参数动态校验、跨层级操作的自动化方案,其核心突破体现在&a…...
css 二维码始终显示在按钮的正下方,并且根据不同的屏幕分辨率自动调整位置
一、需求 “求职入口” 下面的浮窗位置在其正下方,并且浏览器分辨的改变(拖动浏览器),位置依旧在最下方 二、实现 <div class"btn_box"><div class"btn_link id"js-apply">求职入口<di…...
串口接收的使用-中断
1、引言 单片机串口、按键等等这种外部输入的, 用轮询的方式非常浪费资源,所以最好的方法就是使用中断接收数据。 2、串口 对于串口中断, 使用的非常频繁。 1. 基本原理 串口中断接收通过以下方式工作: 当串口接收到一个字节…...
处理 Flutter 没有反应
现象 有以下几种 VS Code 中 Initializing the Flutter SDK. This may take a few minutes. 会一直维持在这个右下角提示窗, 但是无后续动作 Flutter CMD flutter_console.bat 执行 --version 或者 doctor [-v] 没有任何输出, 命令卡住 解决办法 参考官方说明 管理员身份…...
Linux-服务器负载评估方法
在 Linux 服务器中,top 命令显示的 load average(平均负载)反映了系统在特定时间段内的负载情况。它通常显示为三个数值,分别代表过去 1 分钟、5 分钟和 15 分钟的平均负载。 1. 什么是 Load Average? Load average …...
入门51单片机(1)-----点灯大师梦开始的地方
前言 这一次的博客主要是要记录一下学习的记录的,方便以后去复习一下的,当然这篇博客还是针于零基础的伙伴萌,看完这篇博客,大家就可以学会点灯了。 安装软件 方法一下一下来教!!萌新宝贝萌可以学会的!帮…...
3.数组(随想录)
1.二分查找 *2.移除元素 还有一个小优化(可以不看) 3.有序数组的平方 *4.长度最小的子数组 (3种解法) 5.螺旋矩阵 ||...
