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

news2024/12/22 22:03:41

 上一篇文章:2022年第十三届蓝桥杯比赛Java B组 【全部真题答案解析-第一部分】_尘封的CPU的博客-CSDN博客最近回顾了Java B组的试题,深有感触:脑子长时间不用会锈住,很可怕。兄弟们,都给我从被窝里爬起来,赶紧开始卷!!!https://blog.csdn.net/kndjg/article/details/127696158?spm=1001.2014.3001.5502

继上一篇题目解析文章,本文分析G~J题,全部是编程题,欢迎兄弟们一起讨论;废话不多说,直接整活儿!

2022年第十三届蓝桥杯Java B组(第二部分 G~J题) 

32dce8b0b142472ab8ce04a91fbcbeae.jpg

试题 G: 数组切分 

 

时间限制: 1.0s
内存限制: 512.0MB
本题总分:20 分
【问题描述】
已知一个长度为 N 的数组: A1, A2, A3, ... A N 恰好是 1 ∼ N 的一个排列。现在要求你将 A 数组切分成若干个 (最少一个,最多 N 个) 连续的子数组,并且每个子数组中包含的整数恰好可以组成一段连续的自然数。
例如对于 A = {1, 3, 2, 4}, 一共有 5 种切分方法:
{1}{3}{2}{4}:每个单独的数显然是 (长度为 1 的) 一段连续的自然数。
{1}{3, 2}{4}:{3, 2} 包含 2 到 3,是 一段连续的自然数,另外 {1} 和 {4} 显然
也是。
{1}{3, 2, 4}:{3, 2, 4} 包含 2 到 4,是 一段连续的自然数,另外 {1} 显然也是。
{1, 3, 2}{4}:{1, 3, 2} 包含 1 到 3,是 一段连续的自然数,另外 {4} 显然也是。
{1, 3, 2, 4}:只有一个子数组,包含 1 到 4,是 一段连续的自然数。
【输入格式】
第一行包含一个整数 N。第二行包含 N 个整数,代表 A 数组。
【输出格式】
输出一个整数表示答案。由于答案可能很大,所以输出其对 1000000007 取
模后的值
【样例输入】
4
1 3 2 4
【样例输出】
5
【评测用例规模与约定】
对于 30% 评测用例,1 ≤ N ≤ 20.
对于 100% 评测用例,1 ≤ N ≤ 10000.

思路与题解 

 

// 代码

 

试题 H: 回忆迷宫

 

时间限制: 1.0s
内存限制: 512.0MB
本题总分:20 分
【问题描述】
爱丽丝刚从一处地下迷宫中探险归来,你能根据她对于自己行动路径的回
忆,帮她画出迷宫地图吗?
迷宫地图是基于二维网格的。爱丽丝会告诉你一系列她在迷宫中的移动步
骤,每个移动步骤可能是上下左右四个方向中的一种,表示爱丽丝往这个方向
走了一格。你需要根据这些移动步骤给出一个迷宫地图,并满足以下条件:
1、爱丽丝能在迷宫内的某个空地开始,顺利的走完她回忆的所有移动步
骤。
2、迷宫内不存在爱丽丝没有走过的空地。
3、迷宫是封闭的,即可通过墙分隔迷宫内与迷宫外。任意方向的无穷远处
视为迷宫外,所有不与迷宫外联通的空地都视为是迷宫内。(迷宫地图为四联
通,即只有上下左右视为联通)
4、在满足前面三点的前提下,迷宫的墙的数量要尽可能少。
【输入格式】
第一行一个正整数 N,表示爱丽丝回忆的步骤数量。
接下来一行 N 个英文字符,仅包含 UDLR 四种字符,分别表示上(Up)、
下(Down)、左(Left)、右(Right)。
【输出格式】
请通过字符画的形式输出迷宫地图。迷宫地图可能包含许多行,用字符 ‘*’
表示墙,用 ‘ ’(空格)表示非墙。
你的输出需要保证以下条件:
1、至少有一行第一个字符为 ‘*’。
2、第一行至少有一个字符为 ‘*’。
3、每一行的最后一个字符为 ‘*’。
4、最后一行至少有一个字符为 ‘*’。
【样例输入】
17
UUUULLLLDDDDRRRRU
【样例输出】
 *****
*      *
* *** *
* *** *
* *** *
*      *
 *****
【样例说明】
爱丽丝可以把第六行第六个字符作为起点。
外墙墙墙墙墙外
墙内内内内内墙
墙内墙墙墙内墙
墙内墙墙墙内墙
墙内墙墙墙内墙
墙内内内内内墙
外墙墙墙墙墙外
【评测用例规模与约定】
对于所有数据,0 < N ≤ 100.

思路与题解 

    本题只是涉及二维数组的边界问题。
     首先声明一个二维数组,0表示墙 1表示非墙,爱丽丝默认在数组的中间位置,定义上下左右四个边界在原点四周,表示迷宫(数组)的打印范围;
     遍历字符串每一个字符,每读取一个字符改变一次爱丽丝的位置(x,y),并将当前位置的数组元素值置1,当坐标(x,y)与边界重合时,相应的边界向外围方向扩张1格;
     最终根据四个边界值打印迷宫图形,0表示*,1表示空格。

public static void Java_B_H() {
		Scanner scanner = new Scanner(System.in);
		int len = scanner.nextInt();
		String route = scanner.next();
		int arr[][] = new int[200][200];
		int x = 99, y = 99;
		arr[x][y] = 1;
		int left = x - 1, right = x + 1, up = y - 1, down = y + 1;
		for (int i = 0; i < len; i++) {
			char ch = route.charAt(i);
			switch (ch) {
			case 'U':
				y -= 1;
				if (y == up)
					up--;
				break;
			case 'D':
				y += 1;
				if (y == down)
					down++;
				break;
			case 'L':
				x -= 1;
				if (x == left)
					left--;
				break;
			case 'R':
				x += 1;
				if (x == right)
					right++;
				break;
			default:
				System.out.println("输入有误,程序中断!");
				return;
			}
			arr[x][y] = 1;
		}
		arr[left][up] = 1;
		arr[left][down] = 1;
		arr[right][up] = 1;
		arr[right][down] = 1;
		for (int j = up; j <= down; j++) {
			for (int i = left; i <= right; i++) {
				if (arr[i][j] == 1)
					System.out.print(" ");
				else
					System.out.print("*");
			}
			System.out.println();
		}
	}

 

试题 I: 红绿灯

 

时间限制: 1.0s
内存限制: 512.0MB
本题总分:25 分
【问题描述】
爱丽丝要开车去上班,上班的路上有许多红绿灯,这让爱丽丝很难过。为 了上班不迟到,她给自己的车安装了氮气喷射装置。现在她想知道自己上班最短需要多少时间。爱丽丝的车最高速度是 1/V 米每秒,并且经过改装后,可以瞬间加速到小于等于最高速的任意速度,也可以瞬间停止。爱丽丝家离公司有 N 米远,路上有 M 个红绿灯,第 i 个红绿灯位于离爱丽丝家 A i 米远的位置,绿灯持续 B i 秒,红灯持续 C i 秒。在初始时(爱丽丝开始计时的瞬间),所有红绿灯都恰好从红灯变为绿灯。如果爱丽丝在绿灯变红的瞬间到达红绿灯,她会停下车等红灯,因为她是遵纪守法的好市民。氮气喷射装置可以让爱丽丝的车瞬间加速到超光速(且不受相对论效应的影响!),达到瞬移的效果,但是爱丽丝是遵纪守法的好市民,在每个红绿灯前她都会停下氮气喷射,即使是绿灯,因为红绿灯处有斑马线,而使用氮气喷射装置通过斑马线是违法的。此外,氮气喷射装置不能连续启动,需要一定时间的冷却,表现为通过 K 个红绿灯后才能再次使用。(也就是说,如果 K = 1,就能一直使用啦!)初始时,氮气喷射装置处于可用状态。
【输入格式】
第一行四个正整数 NMKV,含义如题面所述。
接下来 M 行,每行三个正整数 A iB iC i,含义如题面所述。
【输出格式】
输出一个正整数 T,表示爱丽丝到达公司最短需要多少秒。
【样例输入】
90 2 2 2
30 20 20
60 20 20
【样例输出】
80
【样例说明】
爱丽丝在最开始直接使用氮气喷射装置瞬间到达第一个红绿灯,然后绿灯
通过,以最高速行进 60 秒后到达第二个红绿灯,此时绿灯刚好变红,于是她等
待 20 秒再次变为绿灯后通过该红绿灯,此时氮气喷射装置冷却完毕,爱丽丝再
次使用瞬间到达公司,总共用时 80 秒。
【评测用例规模与约定】
对于 30% 的数据, N ≤ 100; M ≤ 10; M < K; V = 1.
对于 60% 的数据, N ≤ 1000; M ≤ 100; K ≤ 50; B i, C i ≤ 100; V ≤ 10.
对于 100% 的数据,0 < N ≤ 108; M ≤ 1000; K ≤ 1000; 0 < B i, C i ≤ 106 ; 0 <
V ≤ 106 ; 0 < A i < N; 对任意 i < j, 有 A i < A j.

思路与题解 

   根据m个红绿灯把路程分为m+1段 一段路: _________!(感叹号为红绿灯) 
    经过每一段路需要的时间:赶路时间+等红绿灯时间
    用氮气则赶路时间为0,绿灯则等红绿灯时间为0 深度搜索遍历

static int n;// 距离
	static int m;// 红灯数
	static int k;// 氮气就绪次数
	static int v;// 速度
	static int[] av = null;// 经过该红绿灯所需时间a*v
	static int[] b = null;// 绿灯持续时间
	static int[] c = null;// 红灯持续时间
	static int minTime = 999999999;

	public static void Java_B_I() {
		// 入口方法
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		m = scan.nextInt();
		k = scan.nextInt();
		v = scan.nextInt();
		// System.out.println(""+n+m+k+v);
		av = new int[m + 1];// 共m+1段路
		b = new int[m + 1];
		c = new int[m + 1];
		int s = 0;
		for (int i = 0; i < m; i++) {
			int a1 = scan.nextInt();
			int a2 = scan.nextInt();
			int a3 = scan.nextInt();
			av[i] = (a1 - s) * v;
			s += a1;
			b[i] = a2;
			c[i] = a3;
		}
		if (s < n) {
			av[m] = (n - s) * v;
			b[m] = -1;
			c[m] = -1;
		}
		run(0, 0, 0);
		System.out.println(minTime);
	}

	public static int abc(int p, int newTime) {
		int wait = 0;
		wait = (newTime) % (b[p] + c[p]);
		if (wait < b[p]) {// 绿灯,冲
			return 0;
		} else {
			return b[p] + c[p] - wait;// 返回等红灯时间
		}
	}

	public static int run(int p, int kk, int newTime) {
		if (p == m) {// 最后一段路没红绿灯
			if (kk > 0) {// 没有氮气自己爬
				newTime += av[m];
			}
			if (minTime > newTime) {
				minTime = newTime;// 提交成功结果
			}
			return 1;
		} else {// 不是最后一段
			if (newTime >= minTime) {
				return 0;// 剪枝
			}
			if (kk == 0) {// 有氮气就冲
				kk = k - 1;// 缓冲氮气
				newTime += abc(p, newTime);// 等红灯
				run(p + 1, kk, newTime);
			} else {// 不用氮气可以爬捏
				if (kk > 0) {
					kk--;
				}
				newTime += av[p];// 爬过中间路段
				newTime += abc(p, newTime);// 等红灯
				run(p + 1, kk, newTime);
			}
		}
		return 0;
	}

 

 

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

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

相关文章

windows@文件高级共享设置@网络发现功能@从资源管理器网络中访问远程桌面

文章目录 高级共享设置常用选项其他选项操作界面说明 网络类型检查和设置(专用网络和公用网络)&#x1f47a;Note 高级共享设置和防火墙&#x1f47a;命令行方式使用图形界面方式配置 网络发现网络发现功能的详细介绍网络发现的作用&#x1f47a;网络发现的工作原理启用和配置网…

【Java Gui精美界面】IDEA安装及配置SwingX

SwingX 是一个基于 Swing 的 Java GUI 库&#xff0c;旨在为 Swing 提供额外的功能和丰富的组件 特点描述基于 Swing继承了 Swing 的所有特性和功能。丰富组件SwingX 提供了一组高级 UI 组件&#xff0c;例如 TreeTable仍在发展中不活跃的发展ing。。。支持搜索高亮如 TreeTab…

【51单片机】串口通信(发送与接收)

文章目录 前言串口通信简介串口通信的原理串口通信的作用串口编程的一些概念仿真图如何使用串口初始化串口串口模式波特率配置 发送与接收发送接收 示例代码 总结 前言 在嵌入式系统的开发中&#xff0c;串口通信是一种常见且重要的通信方式。它以其简单、稳定的特性在各种应用…

【深度强化学习】关于混合动作空间转化为连续域空间的一点思考与实现

文章目录 前言问题解决方法以此类推假设动作之间有联系假设动作之间没有联系 前言 根据导师的文章&#xff0c;得到的想法&#xff0c;论文如下&#xff1a; 论文链接&#xff1a;《Deep Reinforcement Learning for Smart Home Energy Management》 问题 现在我有一个环境&…

Linux shell编程学习笔记60:touch命令

0 前言 在csdn技能树Linux入门的练习题中&#xff0c;touch是最常见的一条命令。这次我们就来研究它的用法。 1 touch命令的功能、格式和选项说明 我们可以使用touch --help命令查看touch命令的帮助信息。 [purpleendurer bash ~ ]touch --help Usage: touch [OPTION]... …

CMake(1)基础使用

CMake之(1)基础使用 Author: Once Day Date: 2024年6月29日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Linux实践记录_Once-Day的博客-CSDN博客…

【C++】数组、字符串

六、数组、字符串 讨论数组离不开指针&#xff0c;指针基本上就是数组的一切的基础&#xff0c;数组和指针的相关内容参考我的C系列博文&#xff1a;【C语言学习笔记】四、指针_通过变量名访问内存单元中的数据缺点-CSDN博客【C语言学习笔记】三、数组-CSDN博客 1、数组就是&…

密码学基础之ASN.1编码

简介 ASN.1(Abstract Syntax Notation One)&#xff0c;抽象语法标记。ASN.1是一种国际标准的正式语言&#xff0c;由国际标准化组织&#xff08;ISO&#xff09;和国际电信联盟&#xff08;ITU-T&#xff09;共同制定&#xff0c;用于定义数据结构的抽象语法。它的设计目标是…

Javaweb-初学

1.利用springboot开发一个web应用 简要流程&#xff0c;如下图 2.如何创建一个springboot的项目&#xff0c;下面两张图片是重点关注 第一张图片记得和图片一样改一下路径 第二张就是勾一个选项 3.第一个简单的springboot应用的开发 根据如下步骤进行操作 首先顶部要标识Res…

运算符重载之日期类的实现

接上一篇文章&#xff0c;废话不多说&#xff0c;直接上代码 Date.h #pragma once #include<iostream> using namespace std; #include<assert.h>class Date {//友元函数声明friend ostream& operator<<(ostream& out, const Date& d);friend …

在高并发场景下,怎样避免 PostgreSQL 的死锁问题?

文章目录 &#xff08;一&#xff09;不当的事务设计&#xff08;二&#xff09;不正确的锁使用&#xff08;三&#xff09;并发操作冲突&#xff08;一&#xff09;优化事务设计&#xff08;二&#xff09;正确使用锁&#xff08;三&#xff09;调整数据库参数&#xff08;四&…

解决error Error: certificate has expired问题

安装环境遇到下面问题&#xff1a; 产生原因&#xff1a;可能是开了服务器代理访问导致ssl安全证书失效 解决办法&#xff1a; 在终端输入以下命令&#xff1a; yarn config set "strict-ssl" false -g

简单科普-GPT到底是什么?

1.ChatGPT ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是OpenAI研发的一款聊天机器人程序 &#xff0c;于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够基于在预训练阶段所见…

MathType7.4.4破解版下载支持win版+Mac版

MathType的安装过程非常简单&#xff0c;只需要从官网下载安装文件&#xff0c;然后按照提示进行安装即可。在安装过程中&#xff0c;软件会提示你选择是否安装MathPage插件。如果你经常需要在网页上编辑和发布公式&#xff0c;建议选择安装这个插件。 界面简洁直观 打开MathTy…

sheng的学习笔记-AI-密度聚类

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 需要学习的前置知识&#xff1a;聚类&#xff0c;可参考&#xff1a;sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 什么是密度聚类 密度聚类亦称“基于密度的聚类”(density-based clustering)&#xff0c;此类算法假设…

Python逻辑控制语句 之 判断语句--if、if else 和逻辑运算符结合

逻辑运算符&#xff1a; and or not 1.案例一 需求&#xff1a; 1. 获取⽤户输⼊的⽤户名和密码 2. 判断⽤户名是 admin 并且密码是 123456 时, 在控制台输出: 登录成功! 3. 否则在控制台输出: 登录信息错误! # 需求&#xff1a; # 1. 获取用户输入的用户名和密码 # 2. 判断…

探索 Electron:将 Web 技术带入桌面应用

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;如 HTML、CSS 和 JavaScript&#xff09;构建跨平台的桌面应用程序&#xff0c;它的出现极大地简化了桌面应用程序的开发流程&#xff0c;让更多的开发者能够利用已有的 Web 开发技能…

微服务-网关Gateway

个人对于网关路由的理解&#xff1a; 网关就相当于是一个项目里面的保安&#xff0c;主要作用就是做一个限制项。&#xff08;zuul和gateway两个不同的网关&#xff09; 在路由中进行配置过滤器 过滤器工厂&#xff1a;对请求或响应进行加工 其中filters&#xff1a;过滤器配置…

Typescript 【实用教程】(2024最新版)含类型声明,类型断言,函数,接口,泛型等

简介 TypeScript 是 JavaScript 的超集&#xff0c;是 JavaScript&#xff08;弱类型语言&#xff09; 的强类型版本。 拥有类型机制文件后缀 .tsTypescript type ES6TypeScript 和 JavaScript 的关系类似 less 和 css 的关系TypeScript对 JavaScript 添加了一些扩展&#x…

《人人都是产品经理》:项目一图流

《人人都是产品经理》&#xff1a;项目一图流 项目一图流 项目一图流