• 第十三届蓝桥杯模拟赛第三期


    A.填空题

    问题描述

    请问十六进制数 2021ABCD 对应的十进制是多少?

    参考答案

    539077581

    1. import java.math.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. String str=new BigInteger("2021ABCD",16).toString(10);
    5. System.out.println(str);
    6. }
    7. }

    B.填空题

    问题描述

    ​ 如果一个整数 M 同时是整数 A 和 B 的倍数,则称 M 是 A 和 B 的公倍数,公倍数中最小的一个正整数称为最小公倍数

    例如:2021 和 86 的最小公倍数是 4042。

    请问在 1(含) 到 2021(含) 中,有多少个数与 2021 的最小公倍数是 4042。

    参考答案

    3

    1. public class Main {
    2. public static void main(String[] args) {
    3. int ans=0;
    4. for(int i=1;i<=2021;i++) {
    5. if(f(i,2021)==4042) {
    6. ans++;
    7. System.out.println(i);
    8. }
    9. }
    10. System.out.println(ans);
    11. }
    12. public static int gcd(int a,int b) {
    13. if(b==0)return a;
    14. return gcd(b,a%b);
    15. }
    16. public static int f(int x,int y) {
    17. return x*y/gcd(x,y);
    18. }
    19. }

    C.填空题

    问题描述

    ​ 10 是一个非常特殊的数,它可以表示成两个非负整数的平方和,10 = 3 * 3 + 1 * 1。

    ​ 9 也是同样特殊的数,它可以表示成 9 = 3 * 3 + 0 * 0。

    请问,在 1 到 2021 中有多少个这样的数?

    请注意,有的数有多种表示方法,例如 25 = 5 * 5 + 0 * 0 = 3 * 3 + 4 * 4,在算答案时只算一次。

    参考答案

    624

    1. public class Main {
    2. public static void main(String[] args) {
    3. int ans=0;
    4. for(int i=1;i<=2021;i++) {
    5. if(check(i)) {
    6. ans++;
    7. }
    8. }
    9. System.out.println(ans);
    10. }
    11. public static boolean check(int n) {
    12. for(int i=0;i<=99;i++) {
    13. for(int j=0;j<=99;j++) {
    14. if(i*i+j*j==n) {
    15. return true;
    16. }
    17. }
    18. }
    19. return false;
    20. }
    21. }

    D.填空题

    问题描述

    ​ 下面是一个8个结点的无向图的邻接矩阵表示,其中第 i 行第 j 列表示结点 i 到结点 j 的边长度。当长度为 0 时表示不存在边。

    0 9 3 0 0 0 0 9
    9 0 8 1 4 0 0 0
    3 8 0 9 0 0 0 0
    0 1 9 0 3 0 0 5
    0 4 0 3 0 7 0 6
    0 0 0 0 7 0 5 2
    0 0 0 0 0 5 0 4
    9 0 0 5 6 2 4 0

    请问,这个图的最小生成树大小的多少?

    参考答案

    26

    E.填空题

    问题描述

    下面是一个20*20的矩阵,矩阵中的每个数字是一个1到9之间的数字,请注意显示时去除了分隔符号。

    69859241839387868941
    17615876963131759284
    37347348326627483485
    53671256556167864743
    16121686927432329479
    13547413349962773447
    27979945929848824687
    53776983346838791379
    56493421365365717745
    21924379293872611382
    93919353216243561277
    54296144763969257788
    96233972513794732933
    81443494533129939975
    61171882988877593499
    61216868895721348522
    55485345959294726896
    32124963318242554922
    13593647191934272696
    56436895944919899246

    矩阵中一个子矩阵的值是指子矩阵中所有数值的和。

    ​请问,矩阵中值最大的一个 5 * 5 的子矩阵的值是多少?

    参考答案

    154

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scan=new Scanner(System.in);
    5. int max=Integer.MIN_VALUE;
    6. int[][] a=new int[20][20];
    7. for(int i=0;i<20;i++) {
    8. String str=scan.next();
    9. for(int j=0;j<20;j++) {
    10. a[i][j]=str.charAt(j)-'0';
    11. }
    12. }
    13. for(int i=5;i<20;i++) {
    14. for(int j=5;j<20;j++) {
    15. int sum=0;
    16. for(int a1=i-5;a1
    17. for(int a2=j-5;a2
    18. sum+=a[a1][a2];
    19. }
    20. }
    21. if(sum>max) {
    22. max=sum;
    23. }
    24. }
    25. }
    26. System.out.println(max);
    27. }
    28. }

    F.编程题

    问题描述

    小蓝要写一个网页显示一些商品。

    商品总共有 t 个,按顺序由 1 到 t 编号,每页显示 a 个,请问第 p 页显示的最小和最大编号是多少?

    输入格式

    输入一行包含三个整数 t、a、p,相邻整数之间用一个空格分隔。

    输出格式

    输出一行包含两个整数,分别表示最小和最大编号。

    样例输入

    31 10 3

    样例输出

    21 30

    样例输入

    31 10 4

    样例输出

    31 31

    评测用例规模与约定

    ​ 对于所有评测用例,1 <= t <= 1000,1 <= a <= 100,1 <= p。保证第 p 页至少显示一个商品
     

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scan=new Scanner(System.in);
    5. int t=scan.nextInt();
    6. int a=scan.nextInt();
    7. int p=scan.nextInt();
    8. int count=0;
    9. for(int i=1;i<=t;i=i+a) {
    10. count+=1;
    11. int j=i+a-1;
    12. if(count==p) {
    13. if(j
    14. System.out.println(i+" "+j);
    15. }
    16. if(j>=t) {
    17. System.out.println(i+" "+t);
    18. }
    19. }
    20. }
    21. }
    22. }

    G.编程题

    问题描述

    给定一个正整数 n,请判断 n 的所有数位上的值是否从左到右是严格递增的。

    例如:1589 是严格递增的 。

    再如:1336 不是严格递增的,中间有相同的 3。

    再如:1598 不是严格递增的。

    输入格式

    输入一行包含一个正整数 n。

    输出格式

    如果是严格递增的,输出“YES”(全大写),否则输出“NO”(全大写)。

    样例输入

    1589

    样例输出

    YES

    样例输入

    1336

    样例输出

    NO

    评测用例规模与约定

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

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scan=new Scanner(System.in);
    5. int n =scan.nextInt();
    6. int count=0;
    7. String str=String.valueOf(n);
    8. for(int i=1;i
    9. if(str.charAt(i)<=str.charAt(i-1)) {
    10. count++;
    11. break;
    12. }
    13. }
    14. if(count>0) {
    15. System.out.println("NO");
    16. }
    17. else {
    18. System.out.println("YES");
    19. }
    20. }
    21. }

    H.编程题

    问题描述

    小蓝将自己的车停在路边,在同一天将车开走。给定停车时间和开走时间,请问小蓝停了多长时间?

    输入格式

    输入两行,第一行包含停车时间,第二行包含开走时间。

    每个时间的格式为 HH:MM:SS,其中 HH 表示时,值为 0 到 23 的整数,如果小于 10 用 0 补齐两位;MM 和 SS 分别表示分和秒,值为 0 到 59 的整数,小于 10 时用 0 补齐两位。

    输出格式

    ​ 输出总共停车的时间,格式为 HH:MM:SS。

    样例输入

    08:58:10
    17:20:31

    样例输出

    08:22:21

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scan=new Scanner(System.in);
    5. String str1=scan.next();
    6. String str2=scan.next();
    7. String[] a=new String[3];
    8. String[] b=new String[3];
    9. a=str1.split(":");
    10. b=str2.split(":");
    11. int hour=0;
    12. int min=0;
    13. int s=0;
    14. if(Integer.parseInt(b[2])>Integer.parseInt(a[2])) {
    15. s=Integer.parseInt(b[2])-Integer.parseInt(a[2]);
    16. }
    17. else {
    18. b[1]=Integer.parseInt(b[1])-1+"";
    19. s=Integer.parseInt(b[2])+60-Integer.parseInt(a[2]);
    20. }
    21. if(Integer.parseInt(b[1])>Integer.parseInt(a[1])) {
    22. min=Integer.parseInt(b[1])-Integer.parseInt(a[1]);
    23. }
    24. else{
    25. min=Integer.parseInt(b[1])+60-Integer.parseInt(a[1]);
    26. b[0]=Integer.parseInt(b[0])-1+"";
    27. }
    28. hour=Integer.parseInt(b[0])-Integer.parseInt(a[0]);
    29. System.out.printf("%02d"+":"+"%02d"+":"+"%02d",hour,min,s);
    30. }
    31. }

    I.编程题

    问题描述

    ​ n 个运动员参加一个由 m 项运动组成的运动会,要求每个运动员参加每个项目。

    ​ 每个运动员在每个项目都有一个成绩,成绩越大排名越靠前。每个项目,不同运功员的成绩不会相同,因此排名不会相同。(但是不同项目可能成绩会相同)

    ​ 每个项目的前 k 名分别获得 k 到 1 分,第 i 名获得 max(k+1-i, 0) 分。

    ​ 每个运动员的总分就是他在每个项目上获得的分数之和。

    ​ 请计算每个运动员的总分。

    输入格式

    输入的第一行包含两个整数 n, m, k,用一个空格分隔。

    接下来 n 行,每行包含 m 个整数,第 i 行第 j 个整数表示第 i 个运动员在第 j 项比赛的成绩。

    输出格式

    输出一行包含 n 个整数,依次表示每个运动员的总分,相邻的整数之间用一个空格分隔。

    样例输入

    3 5 2
    5 3 1 5 12
    2 4 2 34 1
    8 6 3 2 2

    样例输出

    4 4 7

    样例说明

    ​ 第 1 个运动员得分为:1+0+0+1+2=4
    ​ 第 2 个运动员得分为:0+1+1+2+0=4
    ​ 第 3 个运动员得分为:2+2+2+0+1=7

    评测用例规模与约定

    ​ 对于 50% 的评测用例,2 <= n, m, k <= 20,0 <= 成绩 <= 1000。
    ​ 对于所有评测用例,2 <= n, m, k <= 100,0 <= 成绩 <= 10000。
     

    1. import java.util.*;
    2. public class Main {
    3. static int k=0;
    4. public static void main(String[] args) {
    5. Scanner scan=new Scanner(System.in);
    6. int n=scan.nextInt();
    7. int m=scan.nextInt();
    8. k=scan.nextInt();
    9. int num=1;
    10. int max=Integer.MIN_VALUE;
    11. int[][] a=new int[n][m];//n位运动员m项成绩
    12. int[] b=new int[n];//这n位运动员第m项成绩
    13. int[] sum=new int[n];//总成绩
    14. for(int i=0;i
    15. for(int j=0;j
    16. a[i][j]=scan.nextInt();
    17. }
    18. }
    19. for(int i=0;i
    20. for(int j=0;j
    21. b[j]=a[j][i];
    22. }
    23. A:while(true) {
    24. for(int k=0;k
    25. if(b[k]>max) {
    26. max=b[k];
    27. }
    28. }
    29. for(int s=0;s
    30. if(max==0) {
    31. num=1;
    32. break A;
    33. }
    34. if(max==b[s]) {
    35. sum[s]+=get(num);
    36. num++;
    37. max=0;
    38. b[s]=0;
    39. continue A;
    40. }
    41. }
    42. }
    43. }
    44. for(int i=0;i
    45. System.out.printf(sum[i]+" ");
    46. }
    47. }
    48. public static int get(int i) {
    49. return Math.max(k+1-i, 0);
    50. }
    51. }

    J.编程题

    问题描述

    ​ 给定 n 个整数 a[1], a[2], …, a[n],小蓝希望在中间选出一部分,满足以下两个条件:

    ​ 1、对于某个下标集合 S,选出的数中有至少 k 个下标在集合 S 中;

    ​ 2、选出的数按照原来的顺序排列,是严格单调上升的,即选出的是一个上升子序列。

    ​ 请问小蓝最多能选出多少个数。

    输入格式

    ​ 输入的第一行包含两个整数 n, k,用一个空格分隔。

    ​ 第二行包含 n 个整数 a[1], a[2], …, a[n],相邻的整数间用空格分隔。

    ​ 第三行包含一个长度为 n 的01串,依次表示每个下标是否在集合 S 中,为 0 表示不在 S 中,为 1 表示在 S 中。

    输出格式

    ​ 输出一行包含一个整数,表示答案。如果没有满足条件的选法,输出-1。

    样例输入

    8 2
    8 1 2 3 9 4 7 10
    10001010

    样例输出

    3

    样例说明

    由于 8、9、7 三个数中至少要选 2 个,只能选 8 和 9,剩下的数只能选最后一个数 10。

    样例输入

    8 3
    8 1 2 3 9 4 7 10
    10001010

    样例输出

    -1

    评测用例规模与约定

    ​ 对于 30% 的评测用例,2 <= n <= 100,0 <= a[i] <= 100, 0 <= k <= 3。
    ​ 对于所有评测用例,2 <= n <= 1000,0 <= a[i] <= 100000, 0 <= k <= 20。

    //行:代表第i个数;

    //列:代表至少含有 j 个在 b 数组中对应 “1” 的数;

    //第i行j列:从 a[0](含)到 a[i](含)中含有至少 j 个在 b 数组中对应 “1” 的数的最长长度

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String args[]) {
    4. Scanner scan=new Scanner(System.in);
    5. int n=scan.nextInt();
    6. int k=scan.nextInt();
    7. int a[]=new int[n+1];
    8. int b[]=new int[n+1];
    9. int[][] dp=new int[n+1][k+1];
    10. dp[0][0]=0;
    11. for(int i=1;i<=k;i++){
    12. dp[0][i]=Integer.MIN_VALUE;
    13. }
    14. int max=Integer.MIN_VALUE;
    15. for(int i=1;i<=n;i++) {
    16. a[i]=scan.nextInt();
    17. }
    18. String str=scan.next();
    19. for(int i=1;i
    20. b[i]=str.charAt(i-1)-'0';
    21. }
    22. for(int i=1;i<=n;i++) {
    23. for(int j=0;j<=k;j++) {
    24. dp[i][j]=Integer.MIN_VALUE;
    25. int y=j;
    26. if(j>0&&b[i]==1) {
    27. y--;
    28. }
    29. for(int p=0;p
    30. if(a[p]1>dp[i][j]) {
    31. dp[i][j]=dp[p][y]+1;
    32. }
    33. }
    34. }
    35. }
    36. for(int i=0;i<=n;i++) {
    37. max=Math.max(max, dp[i][k]);
    38. }
    39. if(max>0) {
    40. System.out.println(max);
    41. }
    42. else{
    43. System.out.println(-1);
    44. }
    45. }
    46. }

  • 相关阅读:
    Python各文件类型对比: .py、.ipynb、.pyi、.pyc、.pyd
    kubernetes问题(一)-探究Pod被驱逐的原因及解决方法
    “第五十天” 机组--数据的表示
    计网试卷概念
    JavaSE | 初识Java(一) | JDK \ JRE \ JVM
    零基础入门Vue之To be or not to be——条件渲染
    软件产品线的相关概念及应用
    如何部署 Git 实现多人协同开发
    MySQL数据库——权限控制及日志管理
    民安智库(第三方市场调查公司)地铁出入口客流量监测,让出行更智能
  • 原文地址:https://blog.csdn.net/s44Sc21/article/details/133944011