2022年第十三届蓝桥杯比赛Java B组 【全部真题答案解析-第一部分】

news2024/11/25 3:19:29

最近回顾了Java B组的试题,深有感触:脑子长时间不用会锈住,很可怕。
兄弟们,都给我从被窝里爬起来,赶紧开始卷!!!

2022年第十三届蓝桥杯Java B组(第一部分 A~F题)

目录

一、填空题

试题 A: 星期计算

思路与题解:

试题 B: 山

思路与题解:

二、编程题

试题 C: 字符统计

思路与题解:

试题 D: 最少刷题数

思路与题解:

试题 E: 求阶乘

 思路与题解:

试题 F: 最大子矩阵

 思路与题解: 


一、填空题

试题 A: 星期计算

本题总分:5 分
【问题描述】
已知今天是星期六,请问  20^{22}天后是星期几?注意用数字 1 到 7 表示星期一到星期日。

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

思路与题解:

    A题显然是个签到题,很多人第一思路就是“取余”,思路没错,但是如果直接暴力取余,那你就格局小了,哥们!
      因为20的22次幂(大于2^88)明显不在long类型的范围内【(2^63)-1】,那么就要分步骤做取余运算:
      根据公式: (a * b) % p = (a % p * b % p) % p 
      20^22相当于22个20做了21次乘法运算,所以我的思路是把每一次乘法的结果取余,这样,别说是long可以装得下,就算是int也手拿把掐了!

	public static void Java_B_A(){
		int n = 20;
		for(int i=0;i<21;i++)
			n = (20*n)%7;
		System.out.println((n+5)%7+1);	
	}

最终结果:7 ,即星期日。
   

试题 B:

本题总分:5 分
【问题描述】
这天小明正在学数数。他突然发现有些正整数的形状像一座“山”,比如 123565321、145541,它们左右对称(回文)且数位上的数字先单调不减,后单调不增。
小明数了很久也没有数完,他想让你告诉他在区间 [2022, 2022222022] 中有多少个数的形状像一座“山”。

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

思路与题解:

    直接暴力遍历,并判断条件,时间有点长但好用。

	public static void Java_B_B(){
		int sum = 0;
		for(int i=2022;i<=2022222022;i++) {
        	if(isUp(i)&&isMirror(i)) {
        		sum++;
        	}
        }
		System.out.println(sum);
	}
	
	public static boolean isMirror(int num){
		StringBuffer str = new StringBuffer(num+"");
		if((str.toString()).equals(str.reverse().toString()))
			return true;
		return false;
	}

	public static boolean isUp(int num){
		String st=num+"";
    	int len=st.length()%2==0?st.length()/2:st.length()/2+1;
    	for(int i=1;i<len;i++) {
    		if(st.charAt(i)<st.charAt(i-1)) {
    			return false;
    		}
    	}
    	return true;
	}

最终结果:3138 。
   

二、编程题

试题 C: 字符统计

时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
  给定一个只包含大写字母的字符串 S ,请你输出其中出现次数最多的字母。如果有多个字   母均出现了最多次,按字母表顺序依次输出所有这些字母。

【输入格式】
 一个只包含大写字母的字符串 S .

【输出格式】
 若干个大写字母,代表答案。

【样例输入】
 BABBACAC

【样例输出】
 AB

【评测用例规模与约定】
 对于 100% 的评测用例,1 ≤ |S | ≤ 10^{6}.

思路与题解:

    本题运用Java的集合框架很容易解决。首先遍历字符串,把其中的每一种字母以键值对<字母种类,出现次数>的形式保存到HashMap中,然后遍历map提取出出现次数最多的n个字母,把它们存到list列表中,利用Collections工具类把list中字母排序,最后输出打印。

	public static void Java_B_C(){
		Scanner scanner = new Scanner(System.in);
		String input = scanner.next();
		HashMap<Character, Integer> mp = new HashMap();
		for(int i=0;i<input.length();i++){
			char ch = input.charAt(i);
			if (mp.get(ch) != null)
				mp.put(ch, (mp.getOrDefault(ch, 0)) + 1);
			else
				mp.put(ch, 1);
		}
		int maxNum = Integer.MIN_VALUE;
		List<Character> list = new ArrayList<Character>();
		for(Character c:mp.keySet()){
			if(mp.get(c)>=maxNum){
				maxNum = mp.get(c);
				list.add(c);
			}
		}
		Collections.sort(list);
		for(Character ch:list){
			System.out.print(ch);
		}
	}

试题 D: 最少刷题数

时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
 小蓝老师教的编程课有 N 名学生,编号依次是 1 . . . N。第 i 号学生这学期刷题的数量是   A_{i}
 对于每一名学生,请你计算他至少还要再刷多少道题,才能使得全班刷题比他多的学生数不   超过刷题比他少的学生数。

【输入格式】
 第一行包含一个正整数 N。
 第二行包含 N 个整数:A_{1},A_{2},A_{3} ,. . . , A_{N}.

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

【样例输入】
  5
 12 10 15 20 6

【样例输出】
 0 3 0 0 7

【评测用例规模与约定】
 对于 30% 的数据,1 ≤ N ≤ 1000, 0 ≤ A_{i} ≤ 1000.
 对于 100% 的数据,1 ≤ N ≤ 100000, 0 ≤ A_{i} ≤ 100000.

思路与题解:

    输入的刷题数进行排序;
    分情况考虑:奇数情况下,超过中间值才能满足全班刷题比他多的学生数不超过刷题比他少的学生数;偶数情况下需要等于中间偏大的值就可以满足条件。

	public static void Java_B_D() {
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int[] nums = new int[n];
		int[] count = new int[n];
		for (int i = 0; i < nums.length; i++) {
			// 输入的一个数组,并把这个数组复制下来
			nums[i] = scan.nextInt();
			count[i] = nums[i];
		}
		// 个数组排一下序方便找到较中间的那个数
		Arrays.sort(count);
		// 找到中间的索引
		int index = 0;
		// 分情况讨论值
		if (n % 2 == 0) {
			index = n / 2 + 1;
		} else {
			index = n / 2;
		}
		// 找到中间值
		int middle = count[index];
		for (int i = 0; i < n; i++) {
			// 判断得到最终结果
			if (nums[i] < middle) {
				System.out.print(middle - nums[i] + 1);
				System.out.print(" ");
			} else {
				System.out.print(0);
				System.out.print(" ");
			}
		}
	}

试题 E: 求阶乘

时间限制: 1.0s 内存限制: 512.0MB
本题总分:15 分
【问题描述】
满足 N! 的末尾恰好有 K 个 0 的最小的 N 是多少?
如果这样的 N 不存在输出 −1。
【输入格式】
 一个整数 K。
【输出格式】
 一个整数代表答案。
【样例输入】
 2
【样例输出】
 10
【评测用例规模与约定】
 对于 30% 的数据,1 ≤ K ≤ 10^{6}.
 对于 100% 的数据,1 ≤ K ≤ 10^{18}.
 

 思路与题解:

    本题要解决两个问题,1.整型数长度越界 2.直接遍历搜索的时间复杂度很大,不可能实现 
    所以要对判断条件作预处理,避免以上两个问题:
         如果末尾存在'0'就是要凑10,而只有2和5两个因数才能得到10,又因为阶乘中2的个数远远大于5,所以要凑5,
         注意对于25,125等数字其中包含不止一个5,所以不能直接输出5K,当k为5时,25的阶乘末尾有6个0,暴力求解: 后面以0结尾的一定是5!....(5的倍数的阶乘) 所以只需要判断5的倍数的阶乘 (判断的数)/5 就是含有5的个数 也是阶乘后0的个数。分析如下:

	public static void Java_B_E() {
		Scanner sc = new Scanner(System.in);
		long k = sc.nextLong();
		long count; // 含有5的个数 也是阶乘后0的个数
		long a = 5; // 直接从5的阶乘(120)开始判断
		while (true) {
			long tempA = a;
			count = 0;
			while (tempA > 0) {
				tempA /= 5;
				count += tempA;
			}

			if (count < k) {
				a += 5;
			} else if (count == k) {
				System.out.println(a);
				break;
			} else {
				System.out.println(-1);
				break;
			}
		}
	}

试题 F: 最大子矩阵

时间限制 : 1.0s
内存限制 : 512.0MB
本题总分: 15
【问题描述】
小明有一个大小为 N × M 的矩阵,可以理解为一个 N M 列的二维数组。
我们定义一个矩阵 m 的稳定度 f ( m ) f ( m ) = max ( m ) min ( m ) ,其中 max ( m )
表示矩阵 m 中的最大值, min ( m ) 表示矩阵 m 中的最小值。现在小明想要从这
个矩阵中找到一个稳定度不大于 limit 的子矩阵,同时他还希望这个子矩阵的面
积越大越好(面积可以理解为矩阵中元素个数)。
子矩阵定义如下:从原矩阵中选择一组连续的行和一组连续的列,这些行
列交点上的元素组成的矩阵即为一个子矩阵。
【输入格式】
第一行输入两个整数 N M ,表示矩阵的大小。
接下来 N 行,每行输入 M 个整数,表示这个矩阵。
最后一行输入一个整数 limit ,表示限制。
【输出格式】
输出一个整数,分别表示小明选择的子矩阵的最大面积。
【样例输入】
3 4
2 0 7 9
0 6 9 7
8 4 6 4
8
【样例输出】
6
【样例说明】
满足稳定度不大于 8 的且面积最大的子矩阵总共有三个,他们的面积都是
6 (粗体表示子矩阵元素):
2 0 7 9
0 6 9 7
8 4 6 4
2 0 7 9
0 6 9 7
8 4 6 4
2 0 7 9
0 6 9 7
8 4 6 4
【评测用例规模与约定】
        评测用例编号                 N                 M
        1, 2                         1 ≤ N ≤ 10         1 ≤ M 10
        3, 4                         N = 1                 M ≤ 100000
        5 ∼ 12                    1 ≤ N ≤ 10         M 10000
        13 ∼ 20                  1 ≤ N ≤ 80         1 ≤ M 80
对于所有评测用例, 0 矩阵元素值 , limit 10^{5}

 思路与题解: 

        时间有限,直接暴力枚举。

    static int[][] arr;

	public static void Java_B_F() {
		Scanner scanner = new Scanner(System.in);
		int N = scanner.nextInt();
		int M = scanner.nextInt();
		arr = new int[N][M];
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				arr[i][j] = scanner.nextInt();
			}
		}
		int limit = scanner.nextInt();
		int max_area = Integer.MIN_VALUE;
		for (int i = N; i > 0; i--) {
			for (int j = M; j > 0; j--) { // i*j的矩阵
				for (int x = 0; x <= N - i; x++) {
					for (int y = 0; y <= M - j; y++) { // 左上角坐标
						int max = find_max(i, j, x, y);
						int min = find_min(i, j, x, y);
						if ((max - min) <= limit) {
							max_area = Math.max(max_area, i * j);
						}
					}
				}
			}
		}
		System.out.println(max_area);
	}

	private static int find_min(int i, int j, int x, int y) {
		// 寻找最小值
		int res = Integer.MAX_VALUE;
		for (int n = x; n < x + i; n++) {
			for (int m = y; m < y + j; m++) {
				res = Math.min(res, arr[n][m]);
			}
		}
		return res;
	}

	private static int find_max(int i, int j, int x, int y) {
		// 寻找最大值
		int res = Integer.MIN_VALUE;
		for (int n = x; n < x + i; n++) {
			for (int m = y; m < y + j; m++) {
				res = Math.max(res, arr[n][m]);
			}
		}
		return res;
	}

以上是A~F前6道题的真题解析,真题解析及内容排版不容易,如果对各位有帮助的话,那就快赞起来吧,感谢关注、收藏、一键三连!

下一篇文章链接:2022年第十三届蓝桥杯Java B组(第二部分 G~J题)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1523124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rabbit MQ详解

写在前面,由于Rabbit MQ涉及的内容较多&#xff0c;赶在春招我个人先按照我认为重要的内容进行一定总结&#xff0c;也算是个学习笔记吧。主要参考官方文档、其他优秀文章、大模型问答。自己边学习边总结。后面有时间我会慢慢把所有内容补全&#xff0c;分享出来也是希望可以给…

可视化搭建一个智慧零售订单平台

前言 智慧零售行业是在数字化浪潮中快速发展的一个领域&#xff0c;它利用先进的信息技术和大数据分析来提升零售业务的效率和顾客体验。智慧零售订单平台&#xff0c;具有跨平台、数据智能清洗和建模&#xff0c;以及更加丰富的数据展示形式等优势。智慧零售订单平台可以以文…

MySQL8空间索引失效

发现问题 表结构如下&#xff0c;boundary字段建立空间索引 CREATE TABLE area (id int(11) NOT NULL COMMENT 行政区划编码,pid int(11) NOT NULL COMMENT 上级编码,deep int(11) NOT NULL COMMENT 深度,name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_…

镜像制作实战篇

“ 在失控边缘冲杀为&#xff0c;最终解脱” CMD与EntryPoint实战 EntryPoint 与 CMD都是docker 镜像制作中的一条命令&#xff0c;它们在概念上可能有些相似&#xff0c;但在使用中&#xff0c;两者是有明显的区别的。比如&#xff0c;执行一个没有调用EntryPoint、CMD的容器会…

一起学数据分析_3(模型建立与评估_1)

使用前面清洗好的数据来建立模型。使用自变量数据来预测是否存活&#xff08;因变量&#xff09;&#xff1f; &#xff08;根据问题特征&#xff0c;选择合适的算法&#xff09;算法选择路径&#xff1a; 1.切割训练集与测试集 import pandas as pd import numpy as np impo…

使用PWM实现呼吸灯功能

CC表示的意思位捕获比较&#xff0c;CCR表示的是捕获比较寄存器 占空比等效于PWM模拟出来的电压的多少&#xff0c;占空比越大等效出的模拟电压越趋近于高电平&#xff0c;占空比越小等效出来的模拟电压越趋近于低电平&#xff0c;分辨率表示的是占空比变化的精细程度&#xf…

(done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW

一个视频&#xff1a;https://www.bilibili.com/video/BV1mb4y1y7EB/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 这里有个视频&#xff0c;讲解得更加生动形象一些 总得来说&#xff0c;词袋模型(Bow, bag-of-words) 是最简…

spring boot nacos注册微服务示例demo_亲测成功

spring boot nacos注册微服务示例demo_亲测成功 先安装好Nacos Nacos安装使用 创建Maven项目 结构如图 例如项目名为: test-demo 下面有个子模块: test-demo-data-process 父模块pom.xml <?xml version"1.0" encoding"UTF-8"?> <project …

【Micropython ESP32】定时器Timer

文章目录 前言一、分频系数1.1 为什么需要分频系数1.2 分频系数怎么计算 二、如何使用定时器2.1 定时器构造函数2.2 定时器初始化2.3 关闭定时器 三、定时器示例代码总结 前言 在MicroPython中&#xff0c;ESP32微控制器提供了丰富的功能&#xff0c;其中之一是定时器&#xf…

【消息队列开发】 实现MemoryDataCenter类——管理内存数据

文章目录 &#x1f343;前言&#x1f334;数据格式的准备&#x1f332;内存操作&#x1f6a9;对于交换机&#x1f6a9;对于队列&#x1f6a9;对于绑定&#x1f6a9;对于单个消息&#x1f6a9;对于队列与消息链表&#x1f6a9;对于未确认消息&#x1f6a9;从硬盘上读取数据 ⭕总…

SpringCloud-深度理解ElasticSearch

一、Elasticsearch概述 1、Elasticsearch介绍 Elasticsearch&#xff08;简称ES&#xff09;是一个开源的分布式搜索和分析引擎&#xff0c;构建在Apache Lucene基础上。它提供了一个强大而灵活的工具&#xff0c;用于全文搜索、结构化搜索、分析以及数据可视化。ES最初设计用…

ARM和AMD介绍

一、介绍 ARM 和 AMD 都是计算机领域中的知名公司&#xff0c;它们在不同方面具有重要的影响和地位。 ARM&#xff08;Advanced RISC Machine&#xff09;&#xff1a;ARM 公司是一家总部位于英国的公司&#xff0c;专注于设计低功耗、高性能的处理器架构。ARM 架构以其精简指…

Vue前端开发记录(一)

本篇文章中的图片均为深色背景&#xff0c;请于深色模式下观看 说明&#xff1a;本篇文章的内容为vue前端的开发记录&#xff0c;作者在这方面的底蕴有限&#xff0c;所以仅作为参考 文章目录 一、安装配置nodejs,vue二、vue项目目录结构三、前期注意事项0、组件1、数不清的报…

一文速通ESP32(基于MicroPython)——含示例代码

ESP32 简介 ESP32-S3 是一款集成 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE) 的 MCU 芯片&#xff0c;支持远距离模式 (Long Range)。ESP32-S3 搭载 Xtensa 32 位 LX7 双核处理器&#xff0c;主频高达 240 MHz&#xff0c;内置 512 KB SRAM (TCM)&#xff0c;具有 45 个可编程 GPIO 管…

IDEA 多个git仓库项目放一个窗口

1、多个项目先通过新建module或者CtrlAltShiftS 添加module引入 2、重点是右下角有时候git 分支视图只有一个module的Repositories。这时候需要去设置把多个git仓库添加到同一个窗口才能方便提交代码。

十五、自回归(AutoRegressive)和自编码(AutoEncoding)语言模型

参考自回归语言模型&#xff08;AR&#xff09;和自编码语言模型&#xff08;AE&#xff09; 1 自回归语言模型&#xff08; AR&#xff09; 自回归语言模型&#xff08;AR&#xff09;就是根据上文内容&#xff08;或下文内容&#xff09;预测下一个&#xff08;或前一个&…

微信小程序(五十八)分步表单多页面传值

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.分步表单传值 2.伪数据生成 源码&#xff1a; app.json {"pages": ["pages/index/index","pages/building/building","pages/room/room","pages/logs/logs&quo…

整数和浮点数在内存中是如何存储的?

1.整数在内存中的存储 首先数据在内存中都是以二进制的形式存储的&#xff0c;而整数在内存中也是以二进制的形式存储的&#xff0c;而整数的表示形式有三种&#xff0c;分别是源码&#xff0c;反码&#xff0c;补码&#xff0c;而整数在内存中是以补码的形式存放的。 三种表示…

图文并茂!在Oracle VM VirtualBox上安装Ubuntu虚拟机的详细步骤指南

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

CTFHUB-web-信息泄漏

题目所在位置&#xff1a;技能树->web->信息泄漏 目录遍历 打开题目&#xff0c;我们进入的是这个页面 翻译过来就是 得到的信息就是&#xff1a;flag要在这些目录里面寻找&#xff0c;我们直接一个一个点开查看就行 发现得到一个flag.txt&#xff0c;点击打开得到flag …