第十一届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-1

简介: 第十一届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)

A、美丽的 2

本题总分:5 分


问题描述


 小蓝特别喜欢 2 ,今年是公元 2020 年,他特别高兴。

 他很好奇,在公元 1 年到公元 2020 年(包含)中,有多少个年份的数位中包含数字 2 ?


答案提交


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


package action;
public class demo {
  public static void main(String[] args) {
  int sum = 0;
  for (int i = 0; i < 2021; i++) {
    int t = i;
    while (t > 0) {
    if (t % 10 == 2) {
      sum++;
      break;
    }
    t = t / 10;
    }
  }
  System.out.println(sum);
  }
}


B、合数个数

本题总分:5 分


问题描述


 一个数如果除了 1 和自己还有其他约数,则称为一个合数。例如:1,2,3 不是合数,4,6 是合数。请问从 1 到 2020 一共有多少个合数。


答案提交


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


package action;
public class demo {
  public static void main(String[] args) {
  int sum = 0;
  for (int i = 1; i < 2021; i++) {
    for (int j = 2; j * j <= i; j++) {
    if (i % j == 0) {
      sum++;
      // System.out.print(i+" ");
      break;
    }
    }
  }
  System.out.println(sum);
  }
}


C、扩散

本题总分:10 分


问题描述


 小蓝在一张无限大的特殊画布上作画。

 这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。

 小蓝在画布上首先点了一下几个点:(0,0),(2020,11),(11,14),(2000,2000)。只有这几个格子上有黑色,其它位置都是白色的。

 每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)。

 请问,经过 2020 分钟后,画布上有多少个格子是黑色的。


答案提交


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


package action;
public class demo {
  public static void main(String[] args) {
  int sum = 0;
  for (int x = -2020; x <= 2020 + 2020; x++) {
    for (int y = -2020; y <= 2000 + 2020; y++) {
    if (check(x, y)) {
      sum++;
    }
    }
  }
  System.out.println(sum);
  }
  private static boolean check(int x, int y) {
  if (Math.abs(x - 0) + Math.abs(y - 0) <= 2020) {
    return true;
  }
  if (Math.abs(x - 2020) + Math.abs(y - 11) <= 2020) {
    return true;
  }
  if (Math.abs(x - 11) + Math.abs(y - 14) <= 2020) {
    return true;
  }
  if (Math.abs(x - 2000) + Math.abs(y - 2000) <= 2020) {
    return true;
  }
  return false;
  }
}


D、阶乘约数

本题总分:10 分


问题描述


 定义阶乘 n!=1×2×3×⋅⋅⋅×n。

 请问 100! (100 的阶乘)有多少个约数。


答案提交


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


package action;
import java.util.ArrayList;
public class demo {
  public static void main(String[] args) {
  int sum = 0;
  ArrayList<Integer> a = new ArrayList<Integer>();
  int b[] = new int[100];
  for (int i = 2; i < 100; i++) {
    if (is(i)) {
    a.add(i);
    }
  }
  for (int i = 2; i <= 100; i++) {
    int t = i;
    for (;;) {
    for (int p : a) {
      if (t % p == 0) {
      b[p] += 1;
      t = t / p;
      break;
      }
    }
    if (t == 1) {
      break;
    }
    }
  }
  long l = 1;
  for (int i = 0; i < b.length; i++) {
    if (b[i] != 0) {
    l = l * (b[i] + 1);
    }
  }
  System.out.println(l);
  }
  private static boolean is(int x) {
  int t = 0;
  for (int i = 2; i < x; i++) {
    if (x % i == 0) {
    t = 1;
    }
  }
  if (t == 1) {
    return false;
  } else {
    return true;
  }
  }
}



E、本质上升序列

本题总分:15 分


问题描述


 小蓝特别喜欢单调递增的事物。

 在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。

 例如,在字符串 lanqiao 中,如果取出字符 n 和 q,则 nq 组成一个单调递增子序列。类似的单调递增子序列还有 lnq、i、ano 等等。

 小蓝发现,有些子序列虽然位置不同,但是字符序列是一样的,例如取第二个字符和最后一个字符可以取到 ao,取最后两个字符也可以取到 ao。

 小蓝认为他们并没有本质不同。

 对于一个字符串,小蓝想知道,本质不同的递增子序列有多少个?

 例如,对于字符串 lanqiao,本质不同的递增子序列有 21 个。它们分别是 l、a、n、q、i、o、ln、an、lq、aq、nq、ai、lo、ao、no、io、lnq、anq、lno、ano、aio。

 请问对于以下字符串(共 200 个小写英文字母,分四行显示):(如果你把以下文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 inc.txt,内容与下面的文本相同)

tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhf

iadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqij

gihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmad

vrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl

 本质不同的递增子序列有多少个?


答案提交


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


package action;
public class demo {
  static int dp[][] = new int[201][27];
  public static void main(String[] args) {
    String str = "tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl";
    for (int i = 1; i <= str.length(); i++) {
      for (int j = 0; j < 26; j++) {
        dp[i][j] = dp[i - 1][j];
        if (str.charAt(i - 1) == 'a' + j) {
          dp[i][j] = 1;
          for (int k = 0; k < j; k++) {
            dp[i][j] += dp[i - 1][k];
          }
        }
      }
    }
    int ans = 0;
    for (int j = 0; j < 26; j++) {
      ans += dp[str.length()][j];
    }
    System.out.print(ans);
  }
}
相关文章
|
2月前
第十四届蓝桥杯集训——JavaC组第十三篇——for循环
第十四届蓝桥杯集训——JavaC组第十三篇——for循环
44 0
|
2月前
|
算法
第十四届蓝桥杯集训——JavaC组第十二篇——while循环(循环四要素)
第十四届蓝桥杯集训——JavaC组第十二篇——while循环(循环四要素)
49 0
|
2月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 数列排序(四种语言对照)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 数列排序(四种语言对照)
32 0
|
2月前
|
Java C语言
第十四届蓝桥杯集训——JavaC组第十四篇——嵌套循环
第十四届蓝桥杯集训——JavaC组第十四篇——嵌套循环
42 0
|
2月前
|
C语言
第十四届蓝桥杯集训——JavaC组第十一篇——switch
第十四届蓝桥杯集训——JavaC组第十一篇——switch
40 0
|
2月前
第十四届蓝桥杯集训——JavaC组第十篇——分支语句
第十四届蓝桥杯集训——JavaC组第十篇——分支语句
39 0
|
2月前
|
算法
第十四届蓝桥杯集训——JavaC组第九篇——三元运算符
第十四届蓝桥杯集训——JavaC组第九篇——三元运算符
36 0
|
2月前
第十四届蓝桥杯集训——JavaC组第九篇——位运算符
第十四届蓝桥杯集训——JavaC组第九篇——位运算符
27 0
|
2月前
第十四届蓝桥杯集训——JavaC组第八篇——进制转换
第十四届蓝桥杯集训——JavaC组第八篇——进制转换
42 0
|
2月前
|
Java 测试技术 C++
第十四届蓝桥杯集训——JavaC组——运算符练习题
第十四届蓝桥杯集训——JavaC组——运算符练习题
50 0