2023年第十四届蓝桥杯省赛B组Java题解【 简洁易懂】

2023年第十四届蓝桥杯省赛B组Java 题解

比赛整体情况说明

第十四届蓝桥杯大赛省赛B组Java赛道共有10道题目,题型分布如下:

题目类型题量难度分布考察重点
结果填空题53简单 + 2中等基础算法、数学逻辑、字符串处理
编程大题52中等 + 3困难动态规划、图论、贪心、模拟

特点分析

  1. 题目整体难度较去年提升约15%,编程大题更注重算法优化能力
  2. 新增对Java新特性(如Stream API)的隐性考察
  3. 数学类题目占比增加,需加强数论知识储备

题目1:卡片游戏(结果填空)

题目描述:给定N张卡片,每张写有数字1-9,求能组成的最大回文数

解题思路

  1. 统计每个数字的出现次数
  2. 回文数对称构建,优先使用高频数字
  3. 特殊处理奇数次数字(最多保留1个)
import java.util.*;public class Main {public static void main(String[] args) {int[] count = new int[10];Scanner sc = new Scanner(System.in);int N = sc.nextInt();// 统计数字出现次数for(int i=0; i<N; i++) {int num = sc.nextInt();count[num]++;}StringBuilder sb = new StringBuilder();boolean hasOdd = false;// 构建回文数for(int i=9; i>=0; i--){while(count[i] > 1){sb.append(i);count[i] -= 2;}if(count[i] == 1 && !hasOdd){sb.append(i);hasOdd = true;}}// 处理全0特殊情况if(sb.length() == 0) System.out.println(0);else System.out.println(sb.toString());}
}

题目2:直线交点(编程大题)

题目描述:给定N条直线方程,求所有交点中纵坐标最小的点

解题思路

  1. 解析直线方程为标准形式
  2. 计算两两直线交点
  3. 维护最小纵坐标的交点
import java.util.*;class Line {double a, b, c; // ax + by + c = 0public Line(double a, double b, double c) {this.a = a; this.b = b; this.c = c;}
}public class Main {static final double EPS = 1e-8;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();List<Line> lines = new ArrayList<>();// 输入处理for(int i=0; i<N; i++){double x1 = sc.nextDouble();double y1 = sc.nextDouble();double x2 = sc.nextDouble();double y2 = sc.nextDouble();// 转换为标准形式double a = y2 - y1;double b = x1 - x2;double c = x2*y1 - x1*y2;lines.add(new Line(a, b, c));}double minY = Double.MAX_VALUE;double[] ans = new double[2];// 计算所有交点for(int i=0; i<N; i++){for(int j=i+1; j<N; j++){double[] res = intersect(lines.get(i), lines.get(j));if(res != null && res[1] < minY - EPS){minY = res[1];ans = res.clone();}}}System.out.printf("%.2f %.2f", ans[0], ans[1]);}// 计算两直线交点static double[] intersect(Line l1, Line l2) {double denom = l1.a*l2.b - l2.a*l1.b;if(Math.abs(denom) < EPS) return null; // 平行double x = (l1.b*l2.c - l2.b*l1.c) / denom;double y = (l1.c*l2.a - l2.c*l1.a) / denom;return new double[]{x, y};}
}

优化点

  • 使用对象封装直线参数
  • 添加EPS避免浮点数精度问题
  • 预处理直线方程为标准形式

题目3:日期统计(结果填空)

题目描述:统计2000年1月1日至2023年3月1日间,满足"月份=日期"的日期数量

解题思路

  1. 遍历指定年份范围内的每个月
  2. 检查当月日期是否等于月份值
  3. 注意闰年2月特殊处理
public class Main {public static void main(String[] args) {int count = 0;for(int y=2000; y<=2023; y++){for(int m=1; m<=12; m++){int maxDay = getMaxDay(y, m);if(m <= maxDay) count++;}}System.out.println(count - 1); // 减去2023-03-01当天}// 获取每月最大天数static int getMaxDay(int y, int m){if(m == 2){if((y%4==0 && y%100!=0) || y%400==0) return 29;return 28;}return new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31}[m];}
}

优化点

  • 使用数组预存每月天数
  • 单独处理2月闰年情况
  • 边界条件处理(题目要求到3月1日前一天)

题目4:最优乘车路线(编程大题)

题目描述:给定地铁线路图,求从A站到B站的最短换乘次数路径

解题思路

  1. 构建站点-线路的双向映射
  2. BFS分层搜索,优先处理换乘次数少的路径
  3. 使用三元组(站点, 当前线路, 换乘次数)作为状态
import java.util.*;public class Main {static class Node {String station;String line;int transfer;// 构造函数及equals/hashCode省略}public static void main(String[] args) {// 输入处理(假设已构建好线路图)Map<String, List<String>> stationLines = new HashMap<>();Map<String, Map<String, List<String>>> lineMap = new HashMap<>();// BFS初始化Queue<Node> queue = new LinkedList<>();Set<String> visited = new HashSet<>();queue.offer(new Node(startStation, null, 0));visited.add(startStation);while(!queue.isEmpty()){Node curr = queue.poll();if(curr.station.equals(target)) {System.out.println(curr.transfer);return;}// 同一线路直达站点for(String next : lineMap.get(curr.line).get(curr.station)){if(!visited.contains(next)){visited.add(next);queue.offer(new Node(next, curr.line, curr.transfer));}}// 换乘其他线路for(String line : stationLines.get(curr.station)){if(!line.equals(curr.line)){for(String next : lineMap.get(line).get(curr.station)){if(!visited.contains(next)){visited.add(next);queue.offer(new Node(next, line, curr.transfer+1));}}}}}}
}

优化点

  • 使用分层BFS保证最短路径
  • 状态包含当前线路避免重复计算
  • 优先队列可优化为双端队列(0-1 BFS)

题目5:矩阵覆盖(编程大题)

题目描述:给定m×n矩阵,用1×2骨牌不重叠覆盖,求方案数

解题思路

  1. 动态规划状态设计:dp[i][j]表示前i行j列的方案数
  2. 状态转移考虑两种放置方式(横向/纵向)
  3. 预处理组合数优化计算
public class Main {static final int MOD = 1000000007;public static void main(String[] args) {int m = sc.nextInt(), n = sc.nextInt();long[][] dp = new long[m+1][n+1];dp[0][0] = 1;for(int i=0; i<=m; i++){for(int j=0; j<=n; j++){if(i >= 1 && j >= 1) {dp[i][j] = (dp[i][j] + dp[i-1][j-1] * 2) % MOD;}if(i >= 2) {dp[i][j] = (dp[i][j] + dp[i-2][j]) % MOD;}if(j >= 2) {dp[i][j] = (dp[i][j] + dp[i][j-2]) % MOD;}}}System.out.println(dp[m][n]);}
}

优化点

  • 模运算防止溢出
  • 状态压缩可优化空间复杂度至O(n)
  • 预处理组合数加速计算

完整题目列表

题号题目名称类型核心算法
1卡片游戏结果填空贪心算法
2直线交点编程大题解析几何、浮点数处理
3日期统计结果填空日期计算
4最优乘车路线编程大题BFS、图论
5矩阵覆盖编程大题动态规划

(注:完整题目及代码请访问蓝桥杯官网题库)


总结与备考建议

  1. 算法基础:重点掌握动态规划、贪心、图论等核心算法
  2. 数学能力:加强数论、组合数学、概率论知识储备
  3. 编码规范:培养快速实现正确代码的能力,注意边界条件处理
  4. 模拟练习:建议按题型专项突破,每周完成2-3套真题模拟

官网链接

  • 蓝桥杯大赛官网:https://www.lanqiao.cn/
  • 历年真题题库:https://www.lanqiao.cn/problems/
  • 报名入口:https://dasai.lanqiao.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习中的数据增强:提升食物图像分类模型性能的关键策略

深度学习中的数据增强&#xff1a;提升食物图像分类模型性能的关键策略 在深度学习领域&#xff0c;数据是模型训练的基石&#xff0c;数据的数量和质量直接影响着模型的性能表现。然而&#xff0c;在实际项目中&#xff0c;获取大量高质量的数据往往面临诸多困难&#xff0c;…

jakarta.mail(javax.mail)包中关于SMTP协议支持的属性参数配置

一、程序属性配置 NO.NameTypeDescription1mail.smtp.userStringSMTP的默认用户名。2mail.smtp.hostString要连接的SMTP服务器。3mail.smtp.portint如果 connect()方法未明确指定一个&#xff0c;则要连接的SMTP服务器端口。默认为25。4mail.smtp.connectiontimeoutint套接字连…

《解锁SCSS算术运算:构建灵动样式的奥秘》

SCSS作为CSS预处理器&#xff0c;算术运算功能犹如一颗璀璨明珠&#xff0c;赋予我们动态计算样式属性值的强大能力&#xff0c;让网页样式不再是一成不变的刻板呈现&#xff0c;而是能够根据各种条件和需求灵动变化。 在SCSS的世界里&#xff0c;算术运算绝非孤立的存在&…

Java 入门篇

文章目录 一、注释1、单行注释2、多行注释3、文档注释 二、字面量注意 三、变量四、标识符 一、注释 1、单行注释 // 同 C992、多行注释 /* 同 C89和 C99 等 */3、文档注释 /** 文档注释&#xff0c;其内容是可以提取到一个程序说明文档中去的*/二、字面量 同 C 常量 注意…

PowerShell安装Chocolatey

文章目录 环境背景安装参考 环境 Windows 11 专业版PowerShell 7.5.1.NET Framework 4.0Chocolatey v2.4.3 背景 Chocolatey是Windows上的包管理工具&#xff0c;有点类似于Linux的 yum 和 apt 命令。比如&#xff0c;PowerShell里默认没有 grep 命令&#xff0c;则可以通过…

将Airtable导入NocoDB

将Airtable导入NocoDB 0. 前提条件1. 详细步骤 NocoDB提供了一种简化流程&#xff0c;可在几分钟内将您的Airtable数据库无缝转移到各种数据库管理系统&#xff0c;包括MySQL、Postgres和SQLite。此功能特别适合希望将Airtable数据库迁移到更强大且可扩展的数据库管理系统中的用…

微软发布了最新的开源推理模型套件“Phi-4-Reasoning

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Elasticsearch入门速通01:核心概念与选型指南

一、Elasticsearch 是什么&#xff1f; 一句话定义&#xff1a; 开源分布式搜索引擎&#xff0c;擅长处理海量数据的实时存储、搜索与分析&#xff0c;是ELK技术栈&#xff08;ElasticsearchKibanaBeatsLogstash&#xff09;的核心组件。 核心能力&#xff1a; 近实时搜索&…

【angular19】入门基础教程(三):关于angular里面的响应式数据入门使用

三个框架&#xff0c;都有响应式数据的概念。在angular里面有专门的叫法&#xff0c;响应式数据叫信号,英文名signal。其他两个框架式没有专门的名字的&#xff0c;统称为动态数据。这点可以说&#xff0c;angular还是太细了&#xff0c;细节值得点赞&#xff01;&#xff01; …

GitHub Actions 和 GitLab CI/CD 流水线设计

以下是关于 GitHub Actions 和 GitLab CI/CD 流水线设计 的基本知识总结: 一、核心概念对比 维度GitHub ActionsGitLab CI/CD配置方式YAML 文件(.github/workflows/*.yml).gitlab-ci.yml执行环境GitHub 托管 Runner / 自托管GitLab 共享 Runner / 自托管市场生态Actions Mar…

【网络编程】HTTP(超文本传输协议)详解

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:网络编程 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;HTTP定义 &#x1f4cc;HTTP工作原理 1.客户端发起请求: 2.服务器处理请求: 3.客户端处理响应: &#x1f4cc;HTTP关键特性 &#x1f38f;HTTP请求方法 &am…

Centos小白之在CentOS8.5中安装Rabbitmq 3.10.8

注意事项 安装以及运行等其他操作&#xff0c;要使用root账号进行&#xff0c;否则会遇到很多麻烦的事情。 使用命令行进行远程登录 ssh root192.168.0.167 安装make 执行安装命令 yum -y install make gcc gcc-c kernel-devel m4 ncurses-devel openssl-devel这里有可能会…

SQL笔记——左连接、右连接、内连接

前言&#xff1a;总是忘记表连接的区别&#xff0c;在面试的时候也容易被问到&#xff0c;因此就好记性不如烂笔头吧 集合运算 有并集、交集、差集 联合查询*&#xff08;针对行合并的&#xff09;* union为关键字&#xff0c;就是将两个select的结果求并集&#xff08;此时重…

LeetCode - 19.删除链表的倒数第N个结点

目录 题目 解法一 双指针算法 核心思想 执行流程 具体例子 代码 解法二 两次遍历法 核心思想 执行流程 具体例子 代码 题目 19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 解法一 双指针算法 核心思想 利用双指针间隔固定距离(n1)&a…

C# 编程核心:控制流与方法调用详解

在编程中&#xff0c;控制流和方法调用是构建程序逻辑的两大基石。它们决定了代码的执行顺序和模块化协作方式。本文将从基础概念出发&#xff0c;结合代码示例&#xff0c;深入解析这两部分内容。 控制流&#xff1a;程序执行的指挥棒 控制流决定了代码的执行路径&#xff0…

Sentinel学习

sentinel是阿里巴巴研发的一款微服务组件&#xff0c;主要为用户提供服务保护&#xff0c;包括限流熔断等措施 &#xff08;一&#xff09;主要功能 流量控制&#xff08;限流&#xff09;&#xff1a;比如限制1s内有多少请求能到达服务器&#xff0c;防止大量请求打崩服务器…

Linux中进程的属性:进程优先级

一、优先级和进程优先级 1.1什么是优先级 优先级就是获取某种资源的先后顺序&#xff0c;比如打饭时排队&#xff1a;排队就是在确认优先级 1.2为什么要有优先级 本质上其实是目标资源相对于需求者来说比较少&#xff0c;如CPU&#xff0c;磁盘&#xff0c;显示器&#xff…

基于LangChain 实现 Advanced RAG-后检索优化(上)-Reranker

摘要 Advanced RAG 的后检索优化&#xff0c;是指在检索环节完成后、最终响应生成前&#xff0c;通过一系列策略与技术对检索结果进行深度处理&#xff0c;旨在显著提升生成内容的相关性与质量。在这些优化手段中&#xff0c;重排序优化&#xff08;Reranker&#xff09;作为核…

【云备份】热点管理模块

目录 1.热点管理文件的基本思路 2.热点管理类的设计 3.热点管理类的实现 1.热点管理文件的基本思路 服务器端的热点文件管理是对上传的非热点文件进行压缩存储&#xff0c;节省磁盘空间。 而热点文件的判断在于上传的文件的最后一次访问时间是否在热点判断时间之内。 实…

LeetCode 560. 和为 K 的子数组 | 前缀和与哈希表的巧妙应用

文章目录 方法思路&#xff1a;前缀和 哈希表核心思想关键步骤 代码实现复杂度分析示例解析总结 题目描述 给定一个整数数组 nums 和一个整数 k&#xff0c;请统计并返回该数组中和为 k 的子数组的数量。 子数组是数组中连续的非空元素序列。 示例 输入&#xff1a;nums …