当前位置: 首页 > news >正文

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

在这里插入图片描述


在这里插入图片描述



个人名片:

🐼作者简介:一名大二在校生,喜欢编程🎋
🐻‍❄️个人主页🥇:小新爱学习.
🐼个人WeChat:hmmwx53
🕊️系列专栏:🖼️

  • 零基础学Java——小白入门必备
  • 重识C语言——复习回顾
  • 计算机网络体系———深度详讲
  • 微信小程序开发——实战开发

🐓每日一句:🍭我很忙,但我要忙的有意义!


文章目录

  • 第十三届蓝桥杯大赛软件赛省赛 Java 大学 B 组
    • 试题 A: 星期计算
    • 试题 B: 山
    • 试题 C: 字符统计
    • 试题 D: 最少刷题数
    • 关注博主不迷路,持续更新中...
    • 欢迎添加微信,加入我的核心小队,请备注来意


第十三届蓝桥杯大赛软件赛省赛 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+" ");
			}
		}
	}
 
}

在这里插入图片描述

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


在这里插入图片描述

欢迎添加微信,加入我的核心小队,请备注来意

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

相关文章:

  • 【MATLAB教程案例25】常用图像变换域的matlab仿真分析——DFT频域,DCT域,小波域等
  • VcXsrv XLaunch 闪退 failed to bind listener 的解决方法
  • 一些特殊SQL使用Mybatis的#{}和${}注意点
  • rpcs3模拟器配置要求是什么?
  • paddleNLP 安装
  • 【算法笔记】位运算详解
  • 《设计模式》装饰者模式
  • SpringBoot--在Entity(DAO)中使用枚举类型
  • Session(服务端会话跟踪技术)
  • CVPR2022 BatchFormer
  • EXCEL中ADDRESS函数的使用
  • libtorch c++ 搭建分类网络进行训练和预测
  • 初学前端-JavaScript(语法)
  • Hold the door!protobuf从PC到STM32的互相通信
  • 【allegro 17.2软件操作保姆级教程一】软件操作环境设置
  • Python基础内容训练11(面向对象进阶)
  • 不要小看get post的区别
  • 32.(前端)主页布局
  • 【Python】9*9乘法口诀表(while、for两种循环)
  • React中组件通信有哪些方式
  • Opencv项目实战:20 单手识别数字0到5
  • Python机器学习:一元回归
  • CB2-2CARD的openSUSE安装NAS环境配置
  • Dubbo 源码分析 – SPI 机制
  • spring笔记下(AOP、事务管理)
  • Java基础语法——方法