文章目录

  • 试题 A
  • 试题 B
  • 试题 C
  • 试题 D
  • 试题 E
  • 试题 F
  • 试题 G
  • 试题 H
  • 试题 I
  • 试题 J

以下均为个人想法和解题思路,如有错误或不足,欢迎指正。


试题 A

本题总分:5 分

  • 【问题描述】

请问在 1 到 2020 中,有多少个数与 2020 互质,即有多少个数与 2020 的最大公约数为 1。

  • 【答案提交】

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

个人答案:800

个人代码:


public class _试题A {public static void main(String[] args) {int ans = 0;for (int i = 1; i <= 2020; ++i) {if (gcd(i, 2020) == 1) {++ans;}}System.out.println(ans);}public static int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}}

解题思路:


试题 B

本题总分:5 分

  • 【问题描述】

ASCII 码将每个字符对应到一个数值(编码),用于信息的表示和传输。在 ASCII 码中,英文字母是按从小到大的顺序依次编码的,例如:字母 A 编码是 65, 字母 B 编码是 66,字母 C 编码是 67,请问字母 Q 编码是多少?

  • 【答案提交】

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

个人答案:81

个人代码:


public class _试题B {public static void main(String[] args) {System.out.println('Q'+0);}}

解题思路:


试题 C

本题总分:10 分

  • 【问题描述】

有一棵二叉树,一个由2021个结点,其中有1000个结点有两个子结点,其他的结点有一个或者0个子结点。
请问,这棵二叉树有多少个叶结点?

  • 【答案提交】

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

个人答案:1001

个人代码:


public class _试题C {public static void main(String[] args) {System.out.println((int)(Math.pow(2, 10-1)-23)*2+23);}}

解题思路:


试题 D

本题总分:10 分

  • 【问题描述】

对于整数 v 和 p,定义 Pierce 序列为:
  a[1] = v
  a[i] = p % a[i-1]
  例如,当 v = 8, p = 21 时,对应的 Pierce 序列为
  a[1] = 8
  a[2] = 5
  a[3] = 1
  再往后计算,值变为 0,不在我们考虑的范围内。因此当 v = 8, p = 21 时, Pierce 序列的长度为 3。
  当 p 一定时,对于不同的 v 值,Pierce 序列的长度可能不同。当 p = 8 时,若 1<=v<p,最长的 Pierce 序列出现在 v=13时,为(13, 8, 5, 1),长度为 4。
  当 p=2021 时,最长的 Pierce 序列出现在 v=1160 时,请问这个序列有多长?

  • 【答案提交】

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

个人答案:12

个人代码:


public class _试题D {public static void main(String[] args) {int v = 1160, p = 2021, ans = 1;while(p%v!=0) {v = p%v;++ ans;}System.out.println(ans);}}

解题思路:


试题 E

本题总分:15 分

  • 【问题描述】

在 Excel 中,第 1 列到第 26 列的列名依次为 A 到 Z,从第 27 列开始,列名有两个字母组成,第 27 列到第 702 列的列名依次为 AA 到 ZZ。之后的列再用 3 个字母、4 个字母表示。
请问,第 2021 列的列名是什么?

  • 【答案提交】

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

个人答案:BYS
(5555,做的时候忘了将字符串反转了,交了SYB)

个人代码:


public class _试题E {public static void main(String[] args) {int n = 2021;StringBuilder stb = new StringBuilder("");while(n!=0) {stb.append((char)(((n-1)%26)+'A'));n = (n-1)/26;}System.out.println(stb.reverse().toString());}}

解题思路:


试题 F

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

  • 【问题描述】

斐波那契数列是这样一个数列:它的第一项和第二项都是1,从第三项开始每一项都是前两项的和。
根据以上定义,我们容易计算出斐波那契数列的前几项依次是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ……
现在请你计算斐波那契数列第N项是奇数还是偶数?

  • 【输入格式】

输入的包含一个整数N。

  • 【输出格式】

如果是奇数输出1,是偶数输出0。

  • 【样例输入】

10

  • 【样例输出】

1

  • 【提示】

找规律。

  • 【评测用例规模与约定】

对于所有评测用例,1 <= N <= 1000000000。

个人代码:


import java.util.Scanner;public class _试题F {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();if(n%3==0) {System.out.println(0);}else {System.out.println(1);}}}

解题思路:


试题 G

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

  • 【问题描述】

在书写一个较大的整数时,为了方便看清数位,通常会在数位之间加上逗号来分割数位,具体的,从右向左,每三位分成一段,相邻的段之间加一个逗号。
例如,1234567 写成 1,234,567。
例如,17179869184 写成 17,179,869,184。
给定一个整数,请将这个整数增加分割符后输出。

  • 【输入格式】

输入一行包含一个整数 v。

  • 【输出格式】

输出增加分割符后的整数。

  • 【样例输入】

1234567

  • 【样例输出】

1,234,567

  • 【样例输入】

17179869184

  • 【样例输出】

17,179,869,184

  • 【评测用例规模与约定】

对于 50% 的评测用例,0 <= v < 10^9 (10的9次方)。
对于所有评测用例,0 <= v < 10^18 (10的18次方)。

个人代码:


import java.util.Scanner;public class _试题G {public static void main(String[] args) {Scanner sc = new Scanner(System.in);long v = sc.nextLong();char[] ch = new String(v+"").toCharArray();if(ch.length<=3) {System.out.println(v);}else if(ch.length%3==0) {System.out.print(""+ch[0]+ch[1]+ch[2]);for(int i=3; i<ch.length; i+=3)System.out.print(","+ch[i]+ch[i+1]+ch[i+2]);}else {for(int i=0; i<ch.length%3; ++i)System.out.print(ch[i]);for(int i=ch.length%3; i<ch.length; i+=3)System.out.print(","+ch[i]+ch[i+1]+ch[i+2]);}}}

解题思路:


试题 H

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

  • 【问题描述】

给定一个矩阵 M,由 n 行 m 列组成,第 i 行第 j 列值为 M[i][j]。
定义矩阵 M 的重量为矩阵中所有元素的和,几位weight(M)
请找到矩阵左上角的一个子矩阵S(矩阵的前 r 行中的前 c 列组成),使得这个子矩阵的重量的两倍最接近矩阵 M 重量。即 |2 weight(S)-weight(M)| 最小。
如果有多个子矩阵满足条件,请找出面积 r * c 最小的一个。
如果仍然有多个子矩阵满足条件,请找出其中 r 最小的一个。

  • 【输入格式】

输入第一行包含两个整数 n, m,表示矩阵的大小。
接下来 n 行,每行 m 个整数,表示给定的矩阵M。

  • 【输出格式】

输出一行,包含两个整数 r, c,表示子矩阵为矩阵 M 的前 r 行中的前 c 列。

  • 【样例输入】

3 4
3 0 1 1
1 0 1 1
1 1 -2 4

  • 【样例输出】

2 3

  • 【评测用例规模与约定】

对于 30% 的评测用例,1 <= n, m <= 20, -10 <= M[i][j] <= 10。
对于 50% 的评测用例,1 <= n, m <= 100, -100 <= M[i][j] <= 100。
对于所有评测用例,1 <= n, m <= 1000, -1000 <= M[i][j] <= 1000。

个人代码:


import java.util.Scanner;public class _试题H{static int total = 0, n, m;static int[][] v;static int r = 0, c = 0, d = Integer.MAX_VALUE;public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();v = new int[n][m];for(int i=0; i<n; ++i) {for(int j=0; j<m; ++j) {v[i][j] = sc.nextInt();total += v[i][j];}}int[][] dp = new int[n+1][m+1];for(int i=1; i<=n; ++i) {for(int j=1; j<=m; ++j) {dp[i][j] = dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+v[i-1][j-1];check(dp[i][j], i, j);}}System.out.println(r+" "+c);}public static void check(int x, int i, int j) {if(Math.abs(2*x-total)<d || Math.abs(2*x-total)==d && i*j<r*c) {r = i;c = j;d = Math.abs(2*x-total);}}}

解题思路:


试题 I

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

  • 【问题描述】

杂货铺老板一共有N件物品,每件物品具有ABC三种属性中的一种或多种。从杂货铺老板处购得一件物品需要支付相应的代价。
现在你需要计算出如何购买物品,可以使得ABC三种属性中的每一种都在至少一件购买的物品中出现,并且支付的总代价最小。

  • 【输入格式】

输入第一行包含一个整数N。
以下N行,每行包含一个整数C和一个只包含"ABC"的字符串,代表购得该物品的代价和其具有的属性。

  • 【输出格式】

输出一个整数,代表最小的代价。如果无论如何凑不齐ABC三种属性,输出-1。

  • 【样例输入】

5
10 A
9 BC
11 CA
4 A
5 B

  • 【样例输出】

13

  • 【评测用例规模与约定】

对于50%的评测用例,1 <= N <= 20
对于所有评测用例,1 <= N <= 1000, 1 <= C <= 100000

唉,做题做得顺就老是丢三落四,提交的代码中没有做“如果无论如何凑不齐ABC三种属性,输出-1”这个判断。

个人代码:


//这种写法更简单同时效率更高
import java.util.Arrays;
import java.util.Scanner;public class _试题I{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] dp = new int[7 + 1];    //模拟二进制,三种属性C、B、A,让它们分别代表4、2、1,即1<<2、1<<1、1<<0(注1<<n是位运算,不会的请先百度),当i==5时,dp[i]表示拥有CA属性时代价最小Arrays.fill(dp, Integer.MAX_VALUE);     //7(十进制)==111(二进制)==CBA,故最终dp[7]就表示同时拥有ABC属性时代价最小for (int i = 0; i < n; ++i) {int c = sc.nextInt(), v = 0;        //v是用来记录当前物品有哪几种属性char[] ch = sc.next().toCharArray();for (int j = 0; j < ch.length; ++j)v |= 1 << (ch[j] - 'A');for (int j = 1; j < dp.length; ++j) {   //j从1到7,分别表示A、B、C、BA、CA、CB、CBA          不会 &(与运算)和 |(或运算)滴,请先百度if ((j & v) != v && dp[j] != Integer.MAX_VALUE && c + dp[j] < dp[v | j])   //假设j==5,v==4,则v中拥有的属性,j也有,所以j没必要与v进行组合dp[v | j] = c + dp[j];         //当dp[j] == Integer.MAX_VALUE时,代表还没有j这种组合;}dp[v] = Math.min(dp[v], c);}System.out.println(dp[7] == Integer.MAX_VALUE ? -1 : dp[7]);}}

解题思路:


试题 J

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

  • 【问题描述】

给定一个序列 (a_1, a_2, …, a_n), 它的一个上升子序列是指从序列中取出一些元素,按照原来的顺序排列后,是单调递增的序列。
例如,对于序列 (3, 2, 7, 6, 7),取出下标为 2, 4, 5 的元素 a_2, a_4, a_5,即 2, 6, 7,是一个上升子序列。
在这个序列中,有 7 个长度为 2 的上升子序列,例如
  1. 下标 1, 3 对应的 3, 7;
  2. 下标 1, 4 对应的 3, 6;
  3. 下标 1, 5 对应的 3, 7;
  4. 下标 2, 3 对应的 2, 7;
  5. 下标 2, 4 对应的 2, 6;
  6. 下标 2, 5 对应的 2, 7;
  7. 下标 4, 5 对应的 6, 7。
注意,可能有下标不同但对应数值相同的上升子序列,他们应当算成不同的上升子序列。
给定序列,请问序列中一共有多少个长度为 k 的上升子序列。

  • 【输入格式】

输入第一行包含两个整数 n, k,表示序列的长度和上升子序列的长度。
第二行包含 n 个整数 a_1, a_2, …, a_n,表示给定的序列。

  • 【输出格式】

输出一行,包含一个整数,表示长度为 k 的上升子序列的数量,答案可能很大,请输出答案除以 1000007 的余数。

  • 【样例输入】

5 2
3 2 7 6 7

  • 【样例输出】

7

  • 【评测用例规模与约定】

对于 30% 的评测用例,1 <= n <= 20, 0 <= a_i <= 100。
对于 50% 的评测用例,1 <= n <= 100, 0 <= a_i <= 1000。
对于所有评测用例,1 <= n <= 1000, 1 <= k <= 10, 0 <= a_i <= 10000。

个人代码:

import java.util.Scanner;public class _试题J{static int n, k, MOD = 1000007;static int[] r;public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();k = sc.nextInt();r = new int[n];for(int i=0; i<n; ++i)r[i] = sc.nextInt();//r = {3, 2, 7, 6, 7}int[][] dp = new int[n][k+1];       //dp[i][j]表示以r[i]结尾并且长度为k的上升序列的数量,如dp[2][2]=2,因为r[2]>r[0]、r[2]>r[1],r[0]和r[1]分别能构造一个长度为1的上升序列for(int i=0; i<n; ++i)dp[i][1] = 1;           //每个元素都能构造出仅有自身的上升序列for(int i=1; i<n; ++i) {       //从左往右依次检查for(int j=0; j<i; ++j) {        //从左往当前位置检查,尝试去发现满足“上升”的条件if(r[i]>r[j]) {             //发现左边存在比当前数值小的,即满足“上升”for(int t=1; t<=k; ++t) {    //这里的t其实可以从2开始,因为dp[j][0]永远等于0     //r[j]能构造出dp[j][t-1]个长度为t-1的上升序列,那么r[i]就能在r[j]的基础上构造出dp[j][t-1]个长度为t的上升序列if(dp[j][t-1]!=0) {            //dp[j][t-1]==0,意味着没有能构造出以r[j]结尾并且长度为t-1的上升序列,那么r[i]就没有能在r[j]的基础上构造出dp[j][t-1]个长度为t的上升序列的可能dp[i][t] = (dp[i][t]+dp[j][t-1])%MOD;       //记得每次都要取余,防止溢出}}}}}int ans = 0;for(int i=0; i<n; ++i) {ans = (ans+dp[i][k])%MOD;           }System.out.println(ans);}}

2021年第十二届蓝桥杯第三场校模拟赛相关推荐

  1. 最新 2021年 第十二届 蓝桥杯 单片机设计与开发 省赛 客观试题 个人答案

    第十二届蓝桥杯单片机设计与开发项目省赛 第一部分客观试题(30分) 不定项选择(3分/题) (1)MCS-51单片机外部中断1的中断请求标志是( B ).     A.ET1        B.IE1 ...

  2. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径

    2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径 Ideas 算法:最短路径 数据结构:图 思路:根据规则构图,单源最短路径Dijkstra算法. 首先构图其实很简单,就是按照 ...

  3. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学B组 - I.双向排序

    2021年第十二届蓝桥杯 - 省赛 - C/C++大学B组 - I.双向排序 Ideas 题目中给出了两种操作: 当 pi = 0 时,表示将 a1, a2, · · · , aqi 降序排列: 当 ...

  4. 2021年第十二届蓝桥杯省赛C/C++B组题解总结

    前几天(2021.4.18)刚刚比完了2021年第十二届蓝桥杯省赛,本人参加的是软件组C++B组的比赛,本文包括了这一届C++B组的题目以及部分题解.感悟和总结. 目录 试题A.空间 试题B.卡片 试 ...

  5. 2021年第十二届蓝桥杯软件类省赛python组试题及其解析。

    目录 一.卡片 二.直线 三.货物摆放 四.路径 五.回路计算 六.时间显示 七.杨辉三角 八.左孩子右兄弟 九.异或数列 十.括号序列 一.卡片 本题总分:5分 [问题描述] 小蓝有很多数字卡片,每 ...

  6. 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)

    时隔多日,终于会写一些简单DP了哈哈哈! 稍微改版,方便阅读,若有错,请指出 2019年 第十届蓝桥杯省赛题解(JavaB组版) 2020年 第十一届蓝桥杯第一场省赛题解(JavaB组版) 2020年 ...

  7. 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解

    文章目录 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解 1.求余 2.双阶乘 3.格点 4.整数分解 5.城邦 6.特殊年份 7.小平方 8.完全平方数 9.负载均衡 10.国际象棋 20 ...

  8. 2021年第十二届蓝桥杯软件类省赛python组

    目录 2021年第十二届蓝桥杯软件类省赛python组 1.卡片 常规做法 使用functions.Counter计数 2.直线 3.货物摆放 4.路径 5.回路计算 递归--太慢跑不出来 状态压缩D ...

  9. 蓝桥杯单片机——第十二届蓝桥杯单片机第一场省赛

    蓝桥杯单片机--第十二届蓝桥杯单片机第一场省赛 目录 蓝桥杯单片机--第十二届蓝桥杯单片机第一场省赛 一.赛题分析 二.问题总结 三.代码 一.赛题分析 前两天实验室的学妹把开发板还给我了,刚好今天没 ...

最新文章

  1. Confluence 6 从外部目录中同步数据配置同步间隔
  2. Spring MVC在参数绑定前通过Filter过滤器改变请求参数的值
  3. 修正CS2.0中的日历头显示错误
  4. Redis工作笔记-Sorted-Sets类型
  5. nmon安装为什么重启mysql_Centos7部署nmon监控工具
  6. Android之SwipeRefreshLayout下拉刷新组件
  7. Apache - 403错误
  8. 服务器密码过期进不去系统,登陆服务器密码过期
  9. 网络计算机无法访问 没有权限,教您无法访问您可能没有权限使用网络资源怎么解决...
  10. html脚本错误缺少函数,“Microsoft JScript 运行时错误: 缺少对象”问题请教
  11. 【Windows】windows生成rsa密钥对
  12. 无源微波器件--耦合线定向耦合器
  13. CentOS7安装RabbitMQ(解决guest用户无法登录问题)
  14. java里什么是注释,全面解析Java中的注解与注释
  15. CAD高版本窗体阵列LISP_[转载]AutoCAD高版本怎么把阵列对话框调出来?
  16. matplotlib柱状图上方显示数据_可视化技能之Matplotlib(上)|可视化系列01
  17. 知网是如何判断论文重复的?
  18. 上网日志留存_互联网用户日志留存技术标准
  19. 使用Camtasia来给视频或者图片调色
  20. 经常失眠怎么办?失眠最快入睡的方法

热门文章

  1. 品牌推广应用设计的最佳实践
  2. 设计模式04:代理模式
  3. 内存回收在嵌入式系统应用方面的调研和总结
  4. POWER BI:关于ssas模型更新
  5. 云图说|云数据库RDS跨区域备份
  6. 如何为员工创建内部知识库?
  7. sqlbulkcopy mysql_SqlBulkCopy 批量复制数据到数据库
  8. Kt学习笔记(一) 语法基础
  9. js获取文本高度和屏幕高度
  10. 基于socket的可发送表情简单即时通讯