- 说明:部分题解思路及程序代码 源自 蓝桥杯 官网视频(Java B组历年真题解析)
- 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结
- 2014年 第05届 蓝桥杯 Java B组 省赛真题详解及小结
- 2015年 第06届 蓝桥杯 Java B组 省赛真题详解及小结
- 2016年 第07届 蓝桥杯 Java B组 省赛真题详解及小结
- 2017年 第08届 蓝桥杯 Java B组 省赛真题详解及小结
- 2018年 第09届 蓝桥杯 Java B组 省赛真题详解及小结
- 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及小结
- 2020年 第11届 蓝桥杯 第1次模拟赛真题详解及小结【Java版】(校内模拟)// 官方讲解视频
- 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】// 官方讲解视频
- 2020年 第11届 蓝桥杯 C/C++ B组 省赛真题详解及小结【第1场省赛 2020.07.05】【Java版】
- 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.07.05】
- 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.07.05】
- 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第2场省赛 2020.10.17】
- 2021年 第12届 蓝桥杯 第1次模拟赛真题详解及小结【Java版】
- 2021年 第12届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】
- 2021年 第12届 蓝桥杯 第3次模拟赛真题详解及小结【Java版】
- 2021年 第12届 蓝桥杯 第4次模拟赛真题详解及小结【Java版】
- 2021年 第12届 蓝桥杯【备赛 直播 公开课 —— 软件类(本科组、高职高专组)】
- 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】
- 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第2场省赛 2021.05.09】
目 录
自己写的,仅供参考,欢迎交流!!!
模拟赛网页截图
一、试题A——答案:25600
问题描述
如果一个 mp3 文件占用磁盘的大小是 4MB,小蓝的硬盘还剩下 100GB 的空间,请问他还可以放多少个这样的 mp3 文件?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
解法一:计算器求解
【答案】:25600
【解析】:1GB = 1024MB 。
解法二:编程求解
二、试题B——答案:12
问题描述
如果整数 a 是整数 b 的整数倍,则称 b 是 a 的约数。
请问,有多少个正整数是 2020 的约数。答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
解法一:for循环+check
【答案】:12
package simulationMatch_12_2021_1;
public class _02B {
public static void main(String[] args) {
int answer = 0;
for (int i = 1; i <= 2020; i++) {
if (2020 % i == 0) {
System.out.print(i + "、");
answer++;
}
}
System.out.println();
System.out.println(answer);
}
}
三、试题C——答案:6973
问题描述
整数 1 到 6 连在一起,成为 123456,长度为 6。
整数 1 到 12 连在一起,成为 123456789101112,长度为 15。
请问整数 1 到 2020 连在一起,长度为多少?答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
解法一:字符串拼接
【答案】:6973
package simulationMatch_12_2021_1;
public class _03C {
public static void main(String[] args) {
String str = "";
for (int i = 1; i <= 2020; i++) {
str += i;
}
System.out.println(str);
System.out.println(str.length());
}
}
四、试题D——答案:2039190
问题描述
一个包含 2020 个结点的无向图,如果图中没有自环和重边,最多包含多少条边?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
解法一:累加求和
【答案】:2039190
【解析】:找规律!
package simulationMatch_12_2021_1;
public class _04D {
public static void main(String[] args) {
int answer = 0;
for (int i = 1; i <= 2019; i++) {
answer += i;
}
System.out.println(answer);
System.out.println(2019 * (1 + 2019) / 2); // 等差数列求和公式
}
}
五、试题E——答案:217
问题描述
在一个序列 a = (a[1], a[2], ..., a[n]) 中,如果 (i, j) 满足 i < j 且 a[i] > a[j],则称为一个逆序对。
例如:(3, 2, 2, 1) 中包含 6 个逆序对。
请问,(87, 39, 35, 1, 99, 10, 54, 1, 46, 24, 74, 62, 49, 13, 2, 80, 24, 58, 8, 14, 83, 23, 97, 85, 3, 2, 86, 10, 71, 15) 中包含多少个逆序对?答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
解法一:双重for循环遍历所有组合
(3, 2, 2, 1)怎么包含6个逆序对???不应该是5个嘛!!!
逆序对:线1、线2、线3、线5、线6。
所以,我感觉题错了!!!
package simulationMatch_12_2021_1;
public class _05E {
public static void main(String[] args) {
int arr1[] = { 3, 2, 2, 1 };
int arr2[] = { 87, 39, 35, 1, 99, 10, 54, 1, 46, 24, 74, 62, 49, 13,
2, 80, 24, 58, 8, 14, 83, 23, 97, 85, 3, 2, 86, 10, 71, 15 };
solve(arr1);
solve(arr2);
}
public static void solve(int arr[]) {
int answer = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (i < j && arr[i] > arr[j]) {
answer++;
}
}
}
System.out.println(answer);
}
}
六、试题F
问题描述
小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。
没想到,日记很快就被老师发现了问题,原来小蓝记完8月31日的日记,竟又记了8月32日和8月33日的日记。这显然是有问题的,因为根本没有8月32日和8月33日。
给定一个月份和一个日期,请问2021年有没有这一天。输入格式
输入的第一行包含一个整数 m,表示月份。
第二行包含一个整数 d,表示日期。输出格式
如果2021年有 m 月 d 日,输入 yes,否则输出 no。
样例输入
8
32样例输出
no
样例输入
2
28样例输出
yes
数据规模和约定
对于所有评测用例,1 <= m <= 20,1 <= d <= 40。
解法一:先检查月份->再检查天数
【解析】:2021年是平年,2月只有28天!(看电脑上的日历即可!)
1 <= m <= 20,1 <= d <= 40。
package simulationMatch_12_2021_1;
import java.util.Scanner;
public class _06F {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int d = sc.nextInt();
if (m == 2) {
if (1 <= d && d <= 28) {
System.out.println("yes");
} else {
System.out.println("no");
}
} else if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
if (1 <= d && d <= 31) {
System.out.println("yes");
} else {
System.out.println("no");
}
} else if (m == 4 || m == 6 || m == 9 || m == 11) {
if (1 <= d && d <= 30) {
System.out.println("yes");
} else {
System.out.println("no");
}
} else if (m >= 13) {
System.out.println("no");
}
}
}
七、试题G
问题描述
给定一个三角形的底边长度 l 和高度 h,求三角形的面积。
输入格式
输入的第一行包含一个整数 l,表示三角形的底边长度。
第二行包含一个整数 h,表示三角形的高。输出格式
输出一个数,表示三角形的面积。如果面积为整数,请直接输出这个整数,不带小数点。如果面积不是整数,请四舍五入保留正好一位小数。
样例输入
5
6样例输出
15
样例输入
5
3样例输出
7.5
数据规模和约定
对于所有评测用例,1 <= l, h <= 100。
解法一:String.format();
package simulationMatch_12_2021_1;
import java.util.Scanner;
public class _07G {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int l = sc.nextInt();
int h = sc.nextInt();
int s = l * h / 2;
if (l * h == s * 2) { // 面积是整数
System.out.println(l * h / 2);
} else { // 面积非整数
double ll = l;
double hh = h;
System.out.println(String.format("%.1f", (ll * hh / 2)));
}
}
}
八、试题H
问题描述
给定一个单词,请问在单词中删除 t 个字母后,能得到的字典序最小的单词是什么?
输入格式
输入的第一行包含一个单词,由大写英文字母组成。
第二行包含一个正整数 t。输出格式
输出一个单词,表示答案
样例输入
LANQIAO
3样例输出
AIAO
数据规模和约定
对于所有评测用例,单词长度不超过 100,t 小于单词长度。
解法一:【不会写!求巨佬支招!】
【解析】:先把字符串中ASCII值大的字母添加到集合big里面,
从前往后遍历字符串,剔除big集合中包含的字符(优先剔除ASCII值大的字符)。
不会写!!!求巨佬支招!!!
package simulationMatch_12_2021_1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class _08H {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int t = sc.nextInt();
char ch[] = str.toCharArray();
Arrays.sort(ch); // 对字符数组进行排序,筛选出ASCII值的字符
System.out.println(Arrays.toString(ch));
char charMax[] = new char[t]; // 将ASCII最大的t个字符存到chMax数组中
for (int i = 0; i < t; i++) {
charMax[i] = ch[str.length() - 1 - i];
}
System.out.println(Arrays.toString(charMax));
char strChar[] = str.toCharArray();
ArrayList<Character> list = new ArrayList<Character>();
for (int i = 0; i < strChar.length; i++) {
list.add(strChar[i]);
}
boolean flag;
for (int i = 0; i < str.length(); i++) {
flag = true;
for (int j = 0; j < t; j++) {
if (list.get(i).equals(charMax[j])) {
flag = false;
}
}
if (flag) {
System.out.print(list.get(i) + "");
}
}
}
}
九、试题I
问题描述
给定一个序列 a_1, a_2, ..., a_n。其中 a_1 < a_2 < ... < a_n。
相邻两个数之间的差(后一个数减前一个数)称为它们的间隙。
请问序列中最大的间隙值是多少?输入格式
输入的第一行包含一个整数 n,表示序列的长度。
第二行包含 n 个正整数,为给定的序列。输出格式
输出一个整数,表示序列中最大的间隙值。
样例输入
5
1 3 8 9 12样例输出
5
样例说明
a_3 - a_2 = 5。
数据规模和约定
对于所有评测用例,1 <= n <= 1000,1 <= a_i <= 100000。
解法一:单层for循环
【解析】:单层for循环遍历数组一次即可!
package simulationMatch_12_2021_1;
import java.util.Scanner;
public class _09I {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int[n + 5];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
if (n == 1) {
System.out.println(arr[0]);
} else {
int max = arr[1] - arr[0];
for (int i = 0; i < n - 1; i++) {
// System.out.println(arr[i + 1] + "-" + arr[i]);
if (max < arr[i + 1] - arr[i]) {
max = arr[i + 1] - arr[i];
}
}
System.out.println(max);
}
}
}
十、试题J
问题描述
小蓝有黄绿蓝三种颜色的小球,分别为 R, G, B 个。同样颜色的小球没有区别。
小蓝将这些小球从左到右排成一排,排完后,将最左边的连续同色小球个数记为 t_1,将接下来的连续小球个数记为 t_2,以此类推直到最右边的小球。
请问,总共有多少总摆放小球的方案,使得 t_1, t_2, ... 为严格单调递增序列,即 t_1 < t_2 < t_3 < ...输入格式
输入一行包含三个整数 R, G, B。
输出格式
输出一个整数,表示答案。
样例输入
3 6 0
样例输出
3
样例说明
用 r 表示红球,g 表示绿球,可能的方案包括:
rrrgggggg
grrrggggg
ggrrrgggg样例输入
2 4 6
样例输出
3
样例说明
用 r 表示红球,g 表示绿球,b 表示蓝球,可能的方案包括:
rrggggbbbbbb
grrgggbbbbbb
brrggggbbbbb数据规模和约定
对于30%的评测用例,1 <= R, G, B <= 10;
对于60%的评测用例,1 <= R, G, B <= 30;
对于所有评测用例,1 <= R, G, B <= 50。
解法一:【不会写!求巨佬支招!】
难,不会写... 求大佬支招...
小结
仔细,认真,加油!!!注意变量的上下界!!!