【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(1)

简介: 【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(1)

第十三届蓝桥杯大赛软件赛省赛 Java 大学 B 组

试题包含“结果填空”和“程序设计”两种题型。

结果填空题:要求选手根据题目描述直接填写结果。求解方式不限。不要

求源代码。把结果填空的答案直接通过网页提交即可,不要书写多余的内容。

程序设计题:要求选手设计的程序对于给定的输入能给出正确的输出结果。

考生的程序只有能运行出正确结果才有机会得分

  • 注意:不要使用 package 语句。
  • 注意:选手代码的主类名必须为:Main,否则会被判为无效代码。
  • 注意:如果程序中引用了类库,在提交时必须将 import 语句与程序的其
    他部分同时提交。只允许使用 Java 自带的类库。

试题 A: 星期计算

【问题描述】

已知今天是星期六,请问 2022 天后是星期几?

注意用数字 1 到 7 表示星期一到星期日。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一

个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【题解思路】

答案:7

对于填空题可以直接利用电脑计算机计算20^22,再对此数进行取余,结果为1,然后下一天即就是星期日即为7

代码示例:

public class Main {
    public static void main(String[] args) {
        double res = Math.pow(20, 22);
        res %= 7;
        System.out.println(res + 6);
    }
}

试题 B: 山

【问题描述】

这天小明正在学数数。

他突然发现有些正整数的形状像一座“山”,比如 123565321、145541,它

们左右对称(回文)且数位上的数字先单调不减,后单调不增。

小明数了很久也没有数完,他想让你告诉他在区间 [2022, 2022222022] 中有

多少个数的形状像一座“山”。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一

个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【题解思路】

答案:3138

读题可知这是道判断回文题,并且具有单调条件!!!

回文数左右对称,所以只需判断是否回文,然后再判断左边的数单调不减,则右边的数一定单调不增。

package lanqiao;
public class B_山 {
  //答案:3138
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    long ans=0;
    for(long i=2022;i<=2022222022;i++) {
      if(check(i)) {
        ans++;
      }
    }
    System.out.println(ans);
  }
  private static boolean check(long i) {
    //判断是否回文
    String string = String.valueOf(i);
    StringBuilder sBuilder = new StringBuilder(string);
    if(string.compareTo(sBuilder.reverse().toString())==0) {  //是回文数
      for(int j=0;j<string.length()/2;j++) {
        int pre = Integer.valueOf(string.charAt(j));
        int aft = Integer.valueOf(string.charAt(j+1));
        if(aft<pre)
          return false;
      }
      System.out.println(i);
      return true;
    }
    return false;
  }
}

试题 C: 字符统计

【问题描述】

给定一个只包含大写字母的字符串 S,请你输出其中出现次数最多的字母。

如果有多个字母均出现了最多次,按字母表顺序依次输出所有这些字母。

【输入格式】

一个只包含大写字母的字符串 S .

【输出格式】

若干个大写字母,代表答案。

【样例输入】

BABBACAC

【样例输出】

AB

【评测用例规模与约定】

对于 100% 的评测用例,1 ≤ |S | ≤ 106.

【题解思路】

这道题很简单,直接利用HashMap存储每个字母出现的次数,再用TreeSet存储,使其按照字典序排列,最后输出次数最多的字母

/**
 * 
 */
package lanqiao;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class C_字符统计 {
  public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    String string = scanner.next();
    Map<Character, Integer> map = new HashMap<>();
    int ans_count = Integer.MIN_VALUE;
    for(int i=0;i<string.length();i++) {
      char c = string.charAt(i);
      if(map.get(c)==null) {
        map.put(c, 1);
      }else {
        map.put(c, map.get(c)+1);
      }
      if(map.get(c)>ans_count) {
        ans_count=map.get(c);
      }
    }
    Set<Character> ansCharacters = new TreeSet<>();
    for(Map.Entry<Character, Integer> entry:map.entrySet()) {
      if(entry.getValue()==ans_count) {
        ansCharacters.add(entry.getKey());
      }
    }
    for(Character c:ansCharacters) {
      System.out.print(c);
    }
  }
}

思路二:

直接统计输出即可:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int[] arr = new int[26];
        for (int i = 0; i < s.length(); i++) {
            arr[s.charAt(i) - 'A']++;
        }
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < 26; i++) {
            max = Math.max(max, arr[i]);
        }
        for (int i = 0; i < 26; i++) {
            if(arr[i] == max) System.out.print((char) (i+'A'));
        }
    }
}

试题 D: 最少刷题数

【问题描述】

小蓝老师教的编程课有 N 名学生,编号依次是 1 . . . N。第 i 号学生这学期

刷题的数量是 Ai。

对于每一名学生,请你计算他至少还要再刷多少道题,才能使得全班刷题

比他多的学生数不超过刷题比他少的学生数。

【输入格式】

第一行包含一个正整数 N。

第二行包含 N 个整数:A1, A2, A3, . . . , AN.

【输出格式】

输出 N 个整数,依次表示第 1 . . . N 号学生分别至少还要再刷多少道题。

【样例输入】

5

12 10 15 20 6

【样例输出】

0 3 0 0 7

【评测用例规模与约定】

对于 30% 的数据,1 ≤ N ≤ 1000, 0 ≤ Ai ≤ 1000.

对于 100% 的数据,1 ≤ N ≤ 100000, 0 ≤ Ai ≤ 100000

【题解思路】

用数组接收每个同学刷题数量,然后先对每个学生的刷题数进行从小到大排列,观察发现,需要再刷题的学生只有前半部分学生,需要刷题人数为n/2,而再刷的题目数量为中间同学的刷题量与该同学的刷题量的差值,然后利用左右与中间值相同数量,求出差值即可

package lanqiao;
import java.util.Arrays;
import java.util.Scanner;
public class D_最少刷题数 {
  public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    int N=scanner.nextInt();
    int[] arr = new int[N];
    int[] find = new int[N];
    for(int i=0;i<N;i++) {
      int num = scanner.nextInt();
      arr[i]=num;
      find[i]=num;
    }
    Arrays.sort(find);
    for(int i=0;i<N;i++) {
      //在find中查找arr[i]的位置
      int pos = Arrays.binarySearch(find, arr[i]);
      //计算其左边的数
      int less = pos;
      int more = N-pos-1;
      if(more>less) {  //刷题多的多余刷题少的
        int d = more-less;
        int num = find[pos+d/2]-find[pos]+1;
        System.out.print(num+" ");
      }else {
        System.out.print(0+" ");
      }
    }
  }
}

关注博主不迷路,持续更新中…

目录
相关文章
|
6天前
|
Java Linux 开发者
软件体系结构 - Java垃圾收集器
【4月更文挑战第22天】软件体系结构 - Java垃圾收集器
19 4
|
2月前
|
Java 开发者 微服务
Java企业应用软件系统架构演变史
Java企业应用软件系统架构演变史
31 0
|
13天前
|
JavaScript Java 测试技术
基于Java的库存管理软件的设计与实现(源码+lw+部署文档+讲解等)
基于Java的库存管理软件的设计与实现(源码+lw+部署文档+讲解等)
24 1
|
18天前
|
Java 测试技术
[软件自动化测试] selenium java环境配置
介绍了包括选择Gradle构建,关闭Gradle Wrapper的默认下载,修改`gradle-wrapper.properties`以使用腾讯云镜像,以及更新`build.gradle`文件添加国内仓库和Selenium依赖。在测试驱动部分,创建了一个简单的JUnit测试用例,展示了如何初始化Edge浏览器并访问网站。运行测试时可能出现关于CDP版本不匹配的警告,可以通过升级Selenium依赖中的CDP版本来解决。推荐根据[Selenium库网页](https://search.maven.org/search?q=g:org.seleniumhq.selenium)提供的版本信息进行升级
334 6
|
3月前
|
Java 数据安全/隐私保护 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-193 Password Suspects(C++&Java)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-193 Password Suspects(C++&Java)
20 1
|
3月前
|
机器学习/深度学习 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-Java全排列公式
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-Java全排列公式
37 0
|
3月前
|
算法 Java
蓝桥杯算法题——题解Java版本——切面条
蓝桥杯算法题——题解Java版本——切面条
36 0
|
设计模式 Oracle Java
Java进阶专题(三) 软件架构设计原则(下)
今天开始我们专题的第二课了,本章节继续分享软件架构设计原则的下篇,将介绍:接口隔离原则、迪米特原则、里氏替换原则和合成复用原则。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的)。
159 0
|
Java Go 数据安全/隐私保护
Java进阶专题(二) 软件架构设计原则(上)
今天开始我们专题的第一课了,也是我开始进阶学习的第一天,我们先从经典设计思想开始,看看大牛市如何写代码的,提升技术审美、提高核心竞争力。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的)
5345 0
|
Java 关系型数据库 Go
Java进阶专题(二) 软件架构设计原则(上)
今天开始我们专题的第一课了,也是我开始进阶学习的第一天,我们先从经典设计思想开始,看看大牛市如何写代码的,提升技术审美、提高核心竞争力。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的)。
299 0