试题 A: 门牌制作

本题总分:5 分

【问题描述】
小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字
符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 个
字符 0, 2 个字符 1, 1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:624

//第一种解法
public class Test {public static void main(String[] args) {int count = 0;for (int i = 1; i <= 2020; i++) {String s = String.valueOf(i);if (s.contains("2")) {//判断s是否包含2for (int j = 0; j < s.length(); j++) {//再判断有几个2if (s.charAt(j) == '2') {count++;}}}}System.out.println(count);}
}
public class Test {public static void main(String[] args) {int count = 0;//对0-2020每个数的每位取余判断是否等于2for (int i = 1; i <= 2020; ++i) {int t = i;while (t > 0) {if (t % 10 == 2) {count++;}t /= 10;}}System.out.println(count);}
}

试题 B: 寻找 2020

本题总分:5 分

【问题描述】
小蓝有一个数字矩阵,里面只包含数字 0 和 2。小蓝很喜欢 2020,他想找
到这个数字矩阵中有多少个 2020 。
小蓝只关注三种构成 2020 的方式:
• 同一行里面连续四个字符从左到右构成 2020。
• 同一列里面连续四个字符从上到下构成 2020。
• 在一条从左上到右下的斜线上连续四个字符,从左上到右下构成 2020。
例如,对于下面的矩阵:
220000
000000
002202
000000
000022
002020
一共有 5 个 2020。其中 1 个是在同一行里的, 1 个是在同一列里的, 3 个
是斜线上的。
小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一
个文件里面,在试题目录下有一个文件 2020.txt,里面给出了小蓝的矩阵。
请帮助小蓝确定在他的矩阵中有多少个 2020。

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案 :16520

import java.util.Scanner;public class Test {static char[][] arr = new char[300][300];public static void main(String[] args) {//输入Scanner sc = new Scanner(System.in);for(int i=0; i<300; ++i) {arr[i] = sc.nextLine().toCharArray();}int res = 0;//判断行是否有2020for(int i=0; i<300; ++i) {for(int j=0; j+3<300; ++j) {if(arr[i][j]=='2' && arr[i][j+1]=='0' && arr[i][j+2]=='2' && arr[i][j+3]=='0')res++;}}//判断列是否有2020for(int i=0; i+3<300; ++i) {for(int j=0; j<300; ++j) {if(arr[i][j]=='2' && arr[i+1][j]=='0' && arr[i+2][j]=='2' && arr[i+3][j]=='0')res++;}}//判断斜是否有2020for(int i=0; i+3<300; ++i) {for(int j=0; j+3<300; ++j) {if(arr[i][j]=='2' && arr[i+1][j+1]=='0' && arr[i+2][j+2]=='2' && arr[i+3][j+3]=='0')res++;}}System.out.println(res);}
}

试题 C: 蛇形填数

本题总分:10 分

【问题描述】
如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。

容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列 的数是多少?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:761

public class Test {public static void main(String[] args) {int res = 1;int t = 4;//arr[i][j]代表蛇形图//arr[1][1]=1,arr[2][2]=arr[1][1]+ 4 =5,arr[3][3]=arr[2][2]+ 8 =13//arr[4][4]=arr[3][3]+ 12 =25........for(int i=2; i<=20; ++i) {res += t;t += 4;}System.out.println(res);}
}
public class Test {public static void main(String[] args) {//arr[1][1]=1*1+0*0=1, arr[2][2]=2*2+1*1=5, arr[3][3]=3*3+2*2=13//arr[4][4]=4*4+3*3=25, arr[5][5]=5*5+4*4=41.....arr[20][20]=20*20+19*19System.out.println(20*20+19*19);}
}

试题 D: 七段码

本题总分:10 分

【问题描述】
小蓝要用七段码数码管来表示一种特殊的文字。

上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。
小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。

例如: b 发光,其他二极管不发光可以用来表达一种字符。
例如: c 发光,其他二极管不发光可以用来表达一种字符。这种 方案与上 一行的方案可以用来表示不同的字符,尽管看上去比较相似。
例如: a, b, c, d, e 发光, f, g 不发光可以用来表达一种字符。
例如: b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光 的二极管没有连成一片。
请问,小蓝可以用七段码数码管表达多少种不同的字符?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:80

import java.util.ArrayList;
import java.util.HashSet;
public class Test {static ArrayList<Integer>[] list;static HashSet<Integer> set = new HashSet<Integer>();public static void main(String[] args) {init();for(int i=0; i<7; ++i) {vis[0] = i;set.add(1<<i);dfs(1, 1<<i);}System.out.println(set.size());}static int[] vis = new int[7];public static void dfs(int n, int v) {for(int i=0; i<n; ++i) {for(int t : list[vis[i]]) {int p = v|(1<<t);if(!set.contains(p)) {set.add(p);vis[n] = t;dfs(n+1, p);}}}}/***           0*      5       1*          6*      4       2*          3*/public static void init() {//存储七位数的关系 list = new ArrayList[7];for(int i=0; i<7; ++i) {list[i] = new ArrayList<Integer>();}list[0].add(1);list[0].add(5);list[1].add(0);list[1].add(6);list[1].add(2);list[2].add(1);list[2].add(3);list[2].add(6);list[3].add(2);list[3].add(4);list[4].add(3);list[4].add(5);list[4].add(6);list[5].add(0);list[5].add(4);list[5].add(6);list[6].add(1);list[6].add(2);list[6].add(4);list[6].add(5);}
}

试题 E: 排序

本题总分:15 分

【问题描述】
小蓝最近学习了一些排序算法,其中冒泡排序让他印象深刻。在冒泡排序中,每次只能交换相邻的两个元素。

小蓝发现,如果对一个字符串中的字符排序,只允许交换相邻的两个字符,则在所有可能的排序方案中,冒泡排序的总交换次数是最少的。
例如,对于字符串 lan 排序,只需要 1 次交换。对于字符串 qiao 排序,总共需要 4 次交换。

小蓝找到了很多字符串试图排序,他恰巧碰到一个字符串,需要 100 次交换,可是他忘了吧这个字符串记下来,现在找不到了。

请帮助小蓝找一个只包含小写英文字母且没有字母重复出现的字符串,对该串的字符排序,正好需要 100 次交换。如果可能找到多个,请告诉小蓝最短的那个。如果最短的仍然有多个,请告诉小蓝字典序最小的那个。请注意字符串中不可以包含相同的字符。

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案: jonmlkihgfedcba

public class Test {public static void main(String[] args) {//由此可以发现15个字符的逆序通过冒泡交换成顺序所需要的交换次数最接近100,// 因此仅需要将onmlkjihgfedcba的第六位移动至第一位即可:jonmlkihgfedcbafor(int i=1; i<20; ++i) {System.out.println(i+":"+((i-1)*i/2));}}
}

试题 F: 成绩分析

时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分

【问题描述】
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是 一个 0 到 100 的整数。

请计算这次考试的最高分、最低分和平均分。

【输入格式】
输入的第一行包含一个整数 n,表示考试人数。 接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

【输出格式】
输出三行。
第一行包含一个整数,表示最高分。
第二行包含一个整数,表示最低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。

【样例输入】
7
80
92
56
74
88
99
10

【样例输出】
99
10
71.29

【评测用例规模与约定】
对于 50% 的评测用例,1≤n≤100。
对于所有评测用例,1≤n≤10000。

import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;double sum = 0;for(int i=0; i<n; ++i) {int t = input.nextInt();sum += t;max = t>max?t:max;min = t<min?t:min;}System.out.println(max);System.out.println(min);System.out.println(String.format("%.2f", sum/n));}
}

试题 G: 单词分析

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

【问题描述】
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不 住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得 最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。

【输入格式】
输入一行包含一个单词,单词只由小写英文字母组成。

【输出格式】
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

【样例输入】
lanqiao

【样例输出】
a
2

【样例输入】
longlonglongistoolong

【样例输出】
o
6

【评测用例规模与约定】
对于所有的评测用例,输入的单词长度不超过 1000。

import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);char[] ch = sc.nextLine().toCharArray();int[] arr = new int[26];for(int i=0; i<ch.length; ++i) {arr[ch[i]-'a']++ ;}char res = 'a';int max = Integer.MIN_VALUE;for(int i=0; i<arr.length; ++i) {if(arr[i]>max) {res = (char)('a'+i);max = arr[i];}}System.out.println(res);System.out.println(max);}
}

试题 H: 数字三角形

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

【问题描述】

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。 对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最 大的和。

路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。

【输入格式】
输入的第一行包含一个整数 N (1 < N ≤ 100),表示三角形的行数。下面的 N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。

【输出格式】
输出一个整数,表示答案。

【样例输入】
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

【样例输出】
27

import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[][] r = new int[n+1][n+1];for(int i=1; i<=n; ++i) {for (int j = 1; j <= i; ++j) {r[i][j] = sc.nextInt();r[i][j] += Math.max(r[i - 1][j - 1], r[i - 1][j]);}}System.out.println(n%2==1?r[n][n/2+1]:Math.max(r[n][n/2], r[n][n/2+1]));}
}

试题 I: 子串分值和

时间限制: 3.0s 内存限制: 512.0MB 本题总分:25 分

【问题描述】
对于一个字符串 S,我们定义 S 的分值 f(S) 为 S 中出现的不同的字符个 数。例如 f(”aba”) = 2,f(”abc”) = 3, f(”aaa”) = 1。 现在给定一个字符串 S[0…n−1](长度为 n),请你计算对于所有 S 的非空 子串 S[i…j](0≤i≤ j < n),f(S[i…j]) 的和是多少。

【输入格式】
输入一行包含一个由小写字母组成的字符串 S。

【输出格式】
输出一个整数表示答案。

【样例输入】
ababc

【样例输出】
28

【样例说明】
子串 f值
a 1
ab 2
aba 2
abab 2
ababc 3
b 1
ba 2
bab 2
babc 3
a 1
ab 2
abc 3
b 1
bc 2
c 1

【评测用例规模与约定】
对于 20% 的评测用例,1≤n≤10;
对于 40% 的评测用例,1≤n≤100;
对于 50% 的评测用例,1≤n≤1000;
对于 60% 的评测用例,1≤n≤10000;
对于所有评测用例,1≤n≤100000。

import java.util.Scanner;public class Test {static char[] ch;static int[][] vis;public static void main(String[] args) {Scanner sc = new Scanner(System.in);ch = sc.nextLine().toCharArray();vis = new int[26][ch.length];vis[ch[0]-'a'][0] = 1;for(int i=1; i<ch.length; ++i) {for(int j=0; j<26; ++j)vis[j][i] = vis[j][i-1];vis[ch[i]-'a'][i] = i+1;}long res = 0;for(int i=0; i<ch.length; ++i)for(int j=0; j<26; ++j)res += vis[j][i];System.out.println(res);}
}

试题 J: 装饰珠

时间限制: 5.0s 内存限制: 512.0MB 本题总分:25 分

【问题描述】
在怪物猎人这一款游戏中,玩家可以通过给装备镶嵌不同的装饰珠来获取
相应的技能,以提升自己的战斗能力。
已知猎人身上一共有 6 66 件装备,每件装备可能有若干个装饰孔,每个装饰
孔有各自的等级,可以镶嵌一颗小于等于自身等级的装饰珠 (也可以选择不镶
嵌)。
装饰珠有M种,编号1至M,分别对应M 种技能,第i种装饰珠的等级
为Li,只能镶嵌在等级大于等于Li的装饰孔中。
对第i种技能来说,当装备相应技能的装饰珠数量达到Ki个时,会产生Wi(Ki) 的价值。镶嵌同类技能的数量越多,产生的价值越大,即Wi(Ki − 1) < Wi(Ki) 。但每个技能都有上限Pi(1 ≤ P i ≤ 7) ,当装备的珠子数量超过Pi时,只会产生Wi(Pi) 的价值。
对于给定的装备和装饰珠数据,求解如何镶嵌装饰珠,使得 6 件装备能得
到的总价值达到最大。

【输入格式】
输入的第1至6行,包含6件装备的描述。其中第i的第一个整数Ni表示
第i件装备的装饰孔数量。后面紧接着Ni个整数,分别表示该装备上每个装饰
孔的等级L(1 ≤ L ≤ 4) 。
第7行包含一个正整数M,表示装饰珠 (技能) 种类数量。
第8至 M + 7行,每行描述一种装饰珠 (技能) 的情况。每行的前两个整数Lj(1 ≤ Lj ≤ 4)和Pj(1 ≤ Pi ≤ 7)分别表示第j种装饰珠的等级和上限。接下来Pj个整数,其中第k个数表示装备该中装饰珠数量为k时的价值 Wj(k)。

【输出格式】
输出一行包含一个整数,表示能够得到的最大价值。

【样例输入】
1 1
2 1 2
1 1
2 2 2
1 1
1 3
3
1 5 1 2 3 5 8
2 4 2 4 8 15
3 2 5 10

【样例输出】
20

【样例说明】
按照如下方式镶嵌珠子得到最大价值 18,括号内表示镶嵌的装饰珠的种类编号:
1: (1)
2: (1) (2)
3: (1)
4: (2) (2)
5: (1)
6: (2)
4 颗技能 1 装饰珠,4 颗技能 2 装饰珠 W1(4) + W2(4) = 5 + 15 = 20。

【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ Ni ≤ 10, 1 ≤ M ≤ 20, 1 ≤ Wj(k) ≤ 500;
对于所有评测用例,1 ≤ Ni ≤ 50, 1 ≤ M ≤ 10000, 1 ≤ Wj(k) ≤ 10000。

import java.util.Scanner;public class Test {public static void main(String[] args) {int[] zhu, l = new int[]{0, 0, 0, 0, 0, 0};int[][] zsk;Scanner sc = new Scanner(System.in);for (int i = 0; i < 6; i++) {int ko = sc.nextInt();for (int j = 0; j < ko; j++) {int li = sc.nextInt();l[li + 1]++;}}int M = sc.nextInt();int z = l[4] + l[5] + l[2] + l[3];l[3] = l[2] + l[3];l[4] = l[3] + l[4];zsk = new int[M + 1][z + 1];for (int i = 0; i < z + 1; i++) zsk[0][i] = 0;for (int i = 0; i < M + 1; i++) zsk[i][0] = 0;for (int i = 1; i < M + 1; i++) {int bt = i;int li = sc.nextInt();int lim = sc.nextInt();zhu = new int[lim];for (int j = 0; j < lim; j++) zhu[j] = sc.nextInt();for (int i1 = 1; i1 < l[li] + 1; i1++) zsk[M][i1] = zsk[M - 1][i1];for (int i1 = l[li] + 1; i1 < z + 1; i1++) {int max = 0;for (int j = 0; i1 - j - 1 >= l[li] && j < zhu.length; j++)max = Math.max(max, zhu[j] + zsk[i - 1][i1 - j - 1]);max = Math.max(max, zsk[i - 1][i1]);zsk[i][i1] = max;}}System.out.println(zsk[M][z]);}
}

2020年第十一届蓝桥杯省赛Java b组题目 答案解析相关推荐

  1. 2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数

    2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数 在线评测 Ideas 对于一个纯循环小数,假设循环节为l,则小数为0.llll-,转换为分数就是 l / (10 ** n ...

  2. 2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛)

    2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛) A:ASC B:卡片 C:直线 D:货物摆放 E:路径 Floyed Dijkstra F:时间显示 G:最少砝码 H:杨辉三角形 I: ...

  3. 2020第十一届蓝桥杯国赛JAVA B组真题解析(带源码及解析)

    蓝桥杯历年真题及解析. 目录 蓝桥杯历年真题及解析. A: 美丽的 2 题目: 分析: AC代码: B: 扩散 题目: 分析: AC代码: C: 阶乘约数 题目: 分析: AC代码: D: 本质上升序 ...

  4. 2020年第十一届蓝桥杯 - 省赛 - Java研究生组+Java大学B组+Python大学组 - E.排序

    Ideas 冒泡排序在最坏情况下(完全逆序)的交换次数为cnt=n(n−1)2cnt=\frac{n(n-1)}{2}cnt=2n(n−1)​,当n=14时,cnt=91,当n=15时,cnt=105 ...

  5. 2020年第十一届蓝桥杯 - 省赛 - Python大学组 - D.蛇形填数

    这道题同样还是: 2020年第十一届蓝桥杯 - 省赛 - C/C++研究生组 - D.蛇形填数 2020年第十一届蓝桥杯 - 省赛 - Java研究生组 - D.蛇形填数 Ideas 这题其实严格意义 ...

  6. 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - H.答疑

    题目链接 Ideas 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - H.答疑 Code Python if __name__ == '__main__':n = int(input( ...

  7. 2017第八届蓝桥杯省赛JAVA C组真题解析(带源码及解析)

    蓝桥杯历年真题及解析. 目录: 蓝桥杯历年真题及解析. A:外星日历(难度:★) 题目: 分析: 代码: B:兴趣小组(难度:★) 题目: 分析: 代码: C:纸牌三角形(难度:★★★) 题目: 分析 ...

  8. 2020年第十一届蓝桥杯 - 省赛 - Python大学组 - C.跑步锻炼

    Ideas Python日期计算,判断周初月初就欧克啦. Code Python from datetime import date from datetime import timedeltaif ...

  9. 2020年第十一届蓝桥杯 - 省赛 - Python大学组 - B.寻找2020

    Ideas 这题其实没什么难度,主要就是要读取文件,整理成一个矩阵,然后遍历整个矩阵,每个是2的位置判断三个方向是否构成2020就可以了. Code Python if __name__ == '__ ...

最新文章

  1. django 限制匿名用户访问以及重定向
  2. python使用scrapy_python使用scrapy发送post请求的坑
  3. Spring Boot 多模块项目实践(附打包方法)
  4. java面向对象各章节教程_第二部分java面向对象编程第08章集合框架List1章节.ppt...
  5. matlab如何把选中区域标亮
  6. 【第一组】beta发行说明
  7. MySQL 复制:最简单也最容易配置出错
  8. soapui调用java类_soapui接口测试-验签值处理-调用java的加密jar包
  9. 共享办公室租赁,突出市场重围
  10. 理论物理考研攻略!!!
  11. Android开发——回调函数实例
  12. Java 后端接口 ECharts 日历表统计每年每月每日的数据条数 ECharts Java 后端接口统计 利用日历表统计 MySQL 数据条数
  13. gridview的sort_GRIDVIEW排序的动态实现...
  14. CCF 201703-5 引水入城
  15. 开源免费的Mac剪切板管理工具-Maccy
  16. phpmywind 查询结果生成csv文件并下载到本地
  17. SmartWin++笔记
  18. 如何安装华为路由器模拟环境ENSP
  19. (RN)Region Normalization for Image Inpainting
  20. 基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙OLED数字钟的设计与实现

热门文章

  1. Laravel 好玩、好用扩展推荐(持续更新)
  2. uniapp上传图片踩过的坑
  3. Matplotlib交互模式画图动态刷新延迟等问题
  4. Vant-ui中digLog弹出层样式出错
  5. 【Unity3D日常BUG】Unity3D解决“找不到类型或命名空间名称“XXX”(您是否缺少using指令或程序集引用?)”等问题
  6. 人工智能自动化测试探索
  7. jQuery AutoForm脚本Easy Form AutoComplete
  8. 联通iPhone无WiFi芯片是个不明智的选择
  9. 一篇文章彻底理解自定义View
  10. UVM sequence机制(4)(response 特性)