16 届蓝桥杯 Java 组省赛真题详解:思路与代码实现
本文整理了 2025 年第 16 届蓝桥杯软件类 Java 组省赛全题详解,涵盖试题 A 至 H。内容包括问题描述、解题思路及完整 Java 代码实现。涉及知识点包括三维空间摆放规律、等差数列求和、字符串匹配、差分优化、动态规划、栈操作及异或运算性质。适合备赛选手复盘学习,重点练习基础算法与大数据输入输出优化技巧。

本文整理了 2025 年第 16 届蓝桥杯软件类 Java 组省赛全题详解,涵盖试题 A 至 H。内容包括问题描述、解题思路及完整 Java 代码实现。涉及知识点包括三维空间摆放规律、等差数列求和、字符串匹配、差分优化、动态规划、栈操作及异或运算性质。适合备赛选手复盘学习,重点练习基础算法与大数据输入输出优化技巧。

2025 年第 16 届蓝桥杯软件类 Java 组省赛已落下帷幕,不同赛区因特殊情况部分使用了备用卷,但整体题型延续了 "基础为主、梯度区分" 的特点。前两道填空题侧重规律分析,中间题型聚焦基础算法实现,后两道难题则考验数据结构与逻辑优化能力。
本文整理了 Java 组全题的详细题解,包含问题描述、核心思路、完整代码及易错点提示,所有代码均严格遵循比赛规范(类名统一为 Main),适合备赛同学复盘学习。文中答案与思路为个人解题总结,仅供参考。
小蓝有一个内部长宽高分别为 200、250、240 毫米的大箱子,要用它存放同样大小的小盒子(外部长宽高 30、40、50 毫米)。小盒子允许从各个方向旋转,请问最多能放多少个小盒子?
本题核心是判断小盒子在大箱子中的三维摆放适配性,无需复杂算法,关键在于发现尺寸间的倍数关系:
200
脉冲强度 p 需满足三个条件:
public class Main {
public static void main(String[] args) {
long ans = 0L;
// 生成所有个位为 5 且数位相同的数,上限 20255202
long p = 5;
while (p <= 20255202) {
if ((p - 45) % 10 == 0) {
ans += p;
}
// 生成下一个候选数(在末尾加 5)
p = p * 10 + 5;
}
System.out.println(ans);
}
}
6172830
给定正整数 n,求从 n 开始的连续 25 个整数的和(n + (n+1) + ... + (n+24))。
输入一行包含一个正整数 n。
输出一行包含一个整数表示答案。
1
325
100
2800
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 等差数列求和公式优化,避免循环
long result = 25L * n + 300;
System.out.println(result);
}
}
小蓝要画一个 h×w 的矩形图形,图形规律为:第一行用 "LANQIAO" 重复填入,从第二行开始,每行向左移动一个字符,同样用 "LANQIAO" 重复填入。求图形中字母 'A' 的个数。
输入第一行包含两个正整数 h、w,用空格分隔。
输出一行包含一个整数表示答案。
5 10
14
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int h = sc.nextInt();
int w = sc.nextInt();
String base = "LANQIAO";
int count = 0;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (base.charAt((i + j) % 7) == 'A') {
count++;
}
}
}
System.out.println(count);
}
}
给定一个长度为 n 的数列 a,对其进行 m 次操作,每次操作给定 l、r、v,将 a[l] 到 a[r] 之间的所有元素都加上 v(数列下标从 1 开始)。请输出经过所有操作后的数列。
输入第一行包含两个正整数 n、m。第二行包含 n 个整数,表示初始数列 a。接下来 m 行,每行包含三个整数 l、r、v,表示一次操作。
输出一行包含 n 个整数,表示经过所有操作后的数列。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
long[] a = new long[n + 2];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= n; i++) {
a[i] = Long.parseLong(st.nextToken());
}
long[] diff = new long[n + 2];
diff[1] = a[1];
for (int i = ; i <= n; i++) {
diff[i] = a[i] - a[i - ];
}
( ; i < m; i++) {
st = (br.readLine());
Integer.parseInt(st.nextToken());
Integer.parseInt(st.nextToken());
Long.parseLong(st.nextToken());
diff[l] += v;
(r + <= n) {
diff[r + ] -= v;
}
}
();
;
( ; i <= n; i++) {
current += diff[i];
sb.append(current).append();
}
System.out.println(sb.toString().trim());
}
}
基因序列由 'A'、'T'、'C'、'G' 四种碱基组成,规定配对规则为 A-T、T-A、C-G、G-C。给定两个长度分别为 n 和 m 的基因序列 s 和 t,求 t 在 s 中所有可能的匹配位置数量。匹配定义为:存在 s 的某个子序列,其长度与 t 相同,且每个位置的碱基都能与 t 对应位置配对。
输入第一行包含字符串 s。第二行包含字符串 t。
输出一个整数,表示匹配位置的数量。
ATCGATC TCG
2
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
String t = sc.next();
int n = s.length();
int m = t.length();
if (m > n) {
System.out.println(0);
return;
}
Map<Character, Character> pairMap = new HashMap<>();
pairMap.put('A', 'T');
pairMap.put('T', 'A');
pairMap.put('C', 'G');
pairMap.put('G', 'C');
int count = 0;
for (int i = 0; i <= n - m; i++) {
boolean match = ;
( ; j < m; j++) {
pairMap.get(t.charAt(j));
(s.charAt(i + j) != target) {
match = ;
;
}
}
(match) {
count++;
}
}
System.out.println(count);
}
}
给定一个包含 n 个正整数的序列,将其依次压入栈中,在压栈过程中可以随时弹出元素。要求弹出的元素序列的乘积尽可能大,且弹出序列必须是非空的。求这个最大乘积。
输入第一行包含一个正整数 n。第二行包含 n 个正整数,表示序列。
输出一个整数,表示最大乘积。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
long[] dp = new long[n];
long maxProduct = arr[0];
dp[0] = arr[0];
for (int i = 1; i < n; i++) {
int x = arr[i];
if (dp[i-1] > 1) {
dp[i] = dp[i-1] * x;
} else {
dp[i] = x;
}
if (dp[i] > maxProduct) {
maxProduct = dp[i];
}
}
System.out.println(maxProduct);
}
}
一条加密信息由 n 个非负整数组成,加密规则为:对于每个位置 i(1≤i≤n),加密后的值 b[i] = a[i] XOR a[i+1](其中 a[n+1] = a[1],即循环异或)。给定加密后的序列 b,求原始序列 a 的任意一个可能解。若不存在解,则输出 -1。
输入第一行包含一个正整数 n。第二行包含 n 个整数,表示加密序列 b。
输出一行包含 n 个整数,表示原始序列 a。若无解,输出 -1。
3 1 2 3
0 1 3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] b = new int[n];
int xorSum = 0;
for (int i = 0; i < n; i++) {
b[i] = sc.nextInt();
xorSum ^= b[i];
}
if (xorSum != 0) {
System.out.println(-1);
return;
}
int[] a = new int[n];
a[0] = 0;
int prefixXor = 0;
for (int i = 1; i < n; i++) {
prefixXor ^= b[i-1];
a[i] = a[0] ^ prefixXor;
}
StringBuilder sb = new ();
( num : a) {
sb.append(num).append();
}
System.out.println(sb.toString().trim());
}
}
2025 年 Java 组省赛整体难度适中,主要考察以下能力:
备考建议:重点练习等差数列求和、差分、异或等基础算法,掌握大数据输入输出优化技巧,同时注重填空题的规律分析能力,可显著提升答题效率。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online