第十一届蓝桥杯国赛JavaB组题解

news2024/11/25 4:33:21

A. 美丽的2

在这里插入图片描述
思路:

枚举 1 到 2020 的每个数,依次判断即可。

代码:

public class Main {
	
	public static boolean check(int x) {
		while (x != 0) {
			if (x % 10 == 2) return true;
			x /= 10;
		}
		return false;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int cnt = 0;
		for (int i = 1; i <= 2020; i++) 
			if (check(i))
				cnt++;
		
		System.out.println(cnt);
	}

}

B. 扩散

在这里插入图片描述
解法一:(比较慢但是容易想)

b f s bfs bfs,先将给出的点加入队列中,并且加到集合里。记录扩散的步数,初始化为2020,然后对队列中的每一个同一层的节点在四个方向上扩散,当扩散的点不在集合里时,把它加到队列里,并加到集合里。每扩散一层就减1,当步数为0时,就结束 b f s bfs bfs,输出答案。

这种做法比较慢,当时跑了好几分钟,不过填空题也无关紧要了。

代码:

package L11;

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Objects;
import java.util.Queue;

public class B {
	
	static final int N = 10000;
	static long ans = 0;
	static int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};
	static HashSet<Point> set = new HashSet<Point>();
	static Queue<Point> queue = new LinkedList<Point>();
	static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	
	public static void bfs() {
		int count = 2020;
		while (!queue.isEmpty()) {
			for (int i = queue.size(); i >= 1; i--) {
				Point p = queue.poll();
				int x = p.x, y = p.y;
				for (int u = 0; u < 4; u++) {
					int a = x + dx[u], b = y + dy[u];
					if (set.contains(new Point(a, b))) continue;
					set.add(new Point(a, b));
					queue.add(new Point(a, b));
				}
			}
			
			count--;
			System.out.println(count);
			if (count == 0) break;
		}
	}
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		queue.add(new Point(0, 0));
		queue.add(new Point(2020, 11));
		queue.add(new Point(11, 14));
		queue.add(new Point(2000, 2000));
		
		set.add(new Point(0, 0));
		set.add(new Point(2020, 11));
		set.add(new Point(11, 14));
		set.add(new Point(2000, 2000));

		bfs();
		System.out.println(set.size());
		
	}
	
	static class Point {
		int x, y;
		Point(int x, int y) {
			this.x = x;
			this.y = y;
		}
		@Override
		public int hashCode() {
			return Objects.hash(x, y);
		}
		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Point other = (Point) obj;
			return x == other.x && y == other.y;
		}
		
	}

}

解法2:

统计在扩散范围内的点与那几个点距离小于2020的个数。

代码:

package L11;

public class B_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int ans = 0;
		for (int i = 0 - 2020; i <= 2020 + 2020; i++) 
			for (int j = 0 - 2020; j <= 2020 + 2020; j++) {
				if (Math.abs(i - 0) + Math.abs(j - 0) <= 2020 || Math.abs(i - 2020) + Math.abs(j - 11) <= 2020 || 
						Math.abs(i - 11) + Math.abs(j - 14) <= 2020 || Math.abs(i - 2000) + Math.abs(j - 2000) <= 2020)
					ans++;
			}
		
		System.out.println(ans);
	}

}

C. 阶乘约数

在这里插入图片描述

思路:

复习了一下试除法求质约数个数与约数个数。

给定一个数 N N N p i p_i pi N N N的质约数,则可以表示为:
N = p 1 α 1 × p 2 α 2 × p 3 α 3 × . . . × p k α k N=p_{1}^{\alpha_1}\times p_{2}^{\alpha_2} \times p_{3}^{\alpha_3}\times... \times p_{k}^{\alpha_k} N=p1α1×p2α2×p3α3×...×pkαk
N N N的每一个约数 d i d_i di,可以表示为:
d i = p 1 β 1 × p 2 β 2 × p 3 β 3 × . . . × p k β k d_i=p_{1}^{\beta_1}\times p_{2}^{\beta_2} \times p_{3}^{\beta_3}\times... \times p_{k}^{\beta_k} di=p1β1×p2β2×p3β3×...×pkβk
其中, 0 ≤ β i ≤ α i 0 \le \beta_i \le \alpha_i 0βiαi β i \beta_i βi的选法有 0 ∼ α i 0 \sim \alpha_i 0αi,共有 ( α i + 1 ) (\alpha_i + 1) (αi+1)种选法 ,根据排列组合原理,约数个数为:
( α 1 + 1 ) × ( α 2 + 1 ) × ( α 3 + 1 ) × . . . × ( α k + 1 ) (\alpha_1 + 1) \times (\alpha_2 + 1) \times (\alpha_3 + 1) \times ... \times (\alpha_k + 1) (α1+1)×(α2+1)×(α3+1)×...×(αk+1)

2 ∼ 100 2 \sim 100 2100 的质因数以及每个质因数的个数,每个质因数的个数加一相乘即可,答案为 ∏ 1 k ( α i + 1 ) \displaystyle\prod^{k}_{1}{(\alpha_i + 1)} 1k(αi+1)

代码:

public class Main {
    
    static int[] p = new int[110];

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for (int i = 2; i <= 100; i++) {
            int x = i;
            for (int j = 2; j <= i / j; j++) {
                if (x % j == 0) {
                    while (x % j == 0) {
                        x /= j;
                        p[j]++;
                    }
                }
            }
            if (x > 1) p[x]++;
        }
        
        long ans = 1;
        for (int i = 2; i < 100; i++) ans *= (p[i] + 1);
        System.out.println(ans);
    }

}

D. 本质上升序列

在这里插入图片描述
解法1:

暴力枚举。因为本质上升序列最长为26,所有的序列个数为 2 26 2^{26} 226,可以二进制枚举所有的序列,判断在字符串中是否存在该序列,如果存在答案就加一,时间复杂度为 O ( 2 26 × 200 ) O(2^{26} × 200) O(226×200)

代码:

public class D {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int ans = 0;
		//String s = "lanqiao";
		String s = "tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl";
		for (int i = 1; i < (1 << 26); i++) {
			StringBuffer sb = new StringBuffer();
 			for (int j = 0; j < 26; j++) {
				if (((i >> j) & 1) == 1)
					sb.append((char)('a' + j));
			}
 			int j = 0;
 			for (int k = 0; k < s.length(); k++) {
 				if (s.charAt(k) == sb.charAt(j)) {
 					j++;
 					if (j == sb.length()) {
 	 					ans++;
 	 					break;
 	 				}
 				}
 				
 			}
		}
		System.out.println(ans);
	}
}

解法2:

动态规划,分析如下,时间复杂度为 O ( N ) O(N) O(N)
在这里插入图片描述

代码:

public class Main {
	
	static int[] dp = new int[200];

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s = "tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl";
		char[] str = s.toCharArray();
		for (int i = 0; i < 200; i++) {
			dp[i] = 1;
			for (int j = 0; j < i; j++) {
				if (str[i] > str[j]) dp[i] += dp[j];
				if (str[i] == str[j]) dp[i] -= dp[j];
			}
		}
		
		long ans = 0;
		for (int i = 0; i < 200; i++) ans += dp[i];
		System.out.println(ans);
	}
}

E. 玩具蛇

在这里插入图片描述
思路:

4 × 4 4 \times 4 4×4 的小方格中每一个位置放置 1 1 1, 接着按上下左右 4 个方向 d f s dfs dfs。在搜索的过程中记得回溯,因为求的是方案的个数。枚举每一个位置都要先标记起点,搜索之后再删除标记。

代码:

public class Main {
	
	static int ans;
	static int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};
	static boolean[][] st = new boolean[4][4];
	
	public static void dfs(int x, int y, int ch) {
		if (ch == 16) {
			ans++;
			return;
		}
		for (int i = 0; i < 4; i++) {
			int a = x + dx[i], b = y + dy[i];
			if (a < 0 || a >= 4 || b < 0 || b >= 4) continue;
			if (st[a][b]) continue;
			
			st[a][b] = true;
			dfs(a, b, ch + 1);
			st[a][b] = false;
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for (int i = 0; i < 4; i++) 
			for (int j = 0; j < 4; j++) {
				st[i][j] = true;
				dfs(i, j, 1);
				st[i][j] = false;
			}
				
		System.out.println(ans);
	}

}

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

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

相关文章

CPU和微程序

目录 一、CPU功能和结构 &#xff08;一&#xff09;CPU的功能 1. 指令控制 2. 操作控制 3. 时间控制 4. 数据加工 5. 中断处理 &#xff08;二&#xff09;CU和ALU的功能 1. CU&#xff08;控制器&#xff09;的功能 2. ALU&#xff08;运算器&#xff09;的功能 …

Greenplum高并发数据库概览

一、前言 GreenPlum DB&#xff08;GPDB&#xff09;是一个开源的高并发(MPP&#xff1a;massively parallel processing ) 数据处理平台&#xff0c;可用于海量数据分析&#xff0c;机器学习&#xff0c;AI场景&#xff0c;专为下一代数据仓库和大规模分析处理设计。 参考&am…

008-从零搭建微服务-系统服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

【ArcGIS Pro二次开发】(33):合并文件夹下的所有shp文件

在工作中&#xff0c;即使很不喜欢用shp文件&#xff0c;但还是经常会收到shp格式的文件。关于shp文件的吐糟就不多说了&#xff0c;除了文件小、字段名长度限制&#xff0c;不能储存弧线段等问题&#xff0c;还有一种处理方式也让人很是难受。 如上图&#xff0c;有些shp文件是…

挂起、激活单个流程实例

类&#xff1a;com.roy.ActivitiBusinessDemo/*** 挂起、激活单个流程实例*/Testpublic void suspendSingleProcessInstance(){ // 1、获取流程引擎ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine(); // 2、RuntimeServiceRuntimeService…

Flowable开始事件-空开始事件

文章目录 空开始事件一、开始事件的定义1、图形标记2、XML内容3、使用示例 总结 空开始事件 利用空开始事件发起流程 一、开始事件的定义 空开始事件意味着没有指定启动流程实例的触发条件。它是最常见的一种开始事件&#xff0c;一般需要人工启动或通过api启动 1、图形标记…

最系统的网络安全自学笔记+学习路线(超详细)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

职场工作的前提

职场工作 目录概述需求&#xff1a; 设计思路实现思路分析1.职场工作 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive.…

自动攻丝机(比例随动控制应用)

比例随动控制的详细介绍,可以参看下面的文章链接: 运动控制比例随动系统_RXXW_Dor的博客-CSDN博客PLC如何测量采集编码器的位置数据,不清楚的可以参看我的另一篇博文:三菱FX3U PLC高速计数器应用(附代码)_RXXW_Dor的博客-CSDN博客本文主要以三菱FX3U系列的高速计数为例来…

数据库期末复习(9.1)故障恢复到检查点之前

故障的分类 事务故障 系统故障 存储介质故障 只能通过故障来实现. 故障恢复 缓冲池策略 STEAL和FORCE策略:具体内容见课件。 为啥要使用steal和force两种策略 原因&#xff1a;如果不用steal策略 缓冲区就会有大量的脏页&#xff0c;如果使用not force策略 由于对同一个对…

R语言多线程提高计算速度,如何使用foreach包加速并行计算

R语言多线程加速 通常情况下&#xff0c;R语言只能使用一个线程来进行计算&#xff0c;因此计算的速度及其感人&#xff01; 最近刚好有一个需求&#xff1a;我有一个参考数据表&#xff0c;里面存放了30万条基因的名称和位置信息&#xff0c;现在我想从里面找到指定的6000个基…

C++程序员的待遇怎么样?我来谈谈学好C++的五个关键点

有个学弟跟我谈到这样一个问题&#xff1a;现在我看到网上很多人都在讲&#xff0c;说这个做C程序员&#xff0c;尤其是本科毕业计算机专业&#xff0c;然后步入社会之后就能拿到月入过万。但是为什么自己找的这个工作啊&#xff0c;普遍在月薪六七千块钱左右&#xff0c;也就是…

一图看懂 werkzeug 模块:是一个全面的WSGI web应用程序库,最先进的WSGI实用程序库之一,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 werkzeug 模块&#xff1a;是一个全面的WSGI web应用程序库&#xff0c;最先进的WSGI实用程序库之一&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;…

强连通分量-tarjan算法缩点

一. 什么是强连通分量&#xff1f; 强连通分量&#xff1a;在有向图G中&#xff0c;如果两个顶点u,v间&#xff08;u->v&#xff09;有一条从u到v的有向路径&#xff0c;同时还有一条从v到u的有向路径&#xff0c;则称两个顶点强连通(strongly connected)。如果有向图G的每…

Linux - 第24节 - Linux高级IO(二)

1.I/O多路转接之select 1.1.select初识 select是系统提供的一个多路转接接口。 • select系统调用可以让我们的程序同时监视多个文件描述符的上的事件是否就绪。 • select的核心工作就是等&#xff0c;当监视的多个文件描述符中有一个或多个事件就绪时&#xff0c;select才会…

Selenium Python 自动抓取个股数据

Selenium是广泛使用的开源Web UI&#xff08;用户界面&#xff09;自动化测试套件之一。支持Chrome, Edge, Firfox等常见浏览器&#xff0c;Selenium Python库也是python对web应用进行自动化测试的非常有用的工具。 Selenium 还适合用于抓取Javascript 动态网页数据。 本文演…

Spring Bean、XML方式Bean配置、Bean实例化配置、Bean注入

文章目录 Bean管理一、SpringBoot Bean 初了解1.1 了解1.2 Bean的作用域1.2.1 注意事项 1.3 第三方Bean 二、 基于XML方式Bean的配置2.1 SpringBean配置概览2.2 bean id class 配置2.3 bean name 别名配置2.4 bean scope 作用范围2.5 bean 延迟加载2.6 bean 初始化与销毁方法配…

数据结构中的顺序表的实现

文章目录 前言一、初识数据结构二、顺序表的实现&#xff08;类型一&#xff09;1.顺序表的头文件2.顺序表的实现 三、顺序表的实现&#xff08;类型二&#xff09;1 顺序表头文件2 顺序表的实现 四、线性表&#xff08;顺序表&#xff09;的缺点总结 前言 本期就进入到我们数据…

[前端语法]js原型链有关的继承问题

深夜反而思维更活跃一些 (1)js中的原型链 js中存在一个名为原型链的机制,其特点如下 加入一个方法A,A方法一个属性为prototype,这个属性会指向某个对象,也成为A类对象的原型对象. 当我们根据A这个方法生成一个对象a,那么a的原型(proto)属性即为这个对象 a可以调用一些原型…

【cropperjs】优秀、优雅的前端图片裁剪库

下载 npm i cropperjsnpm官网- https://www.npmjs.com/package/cropperjs cropperjs关键参数 aspectRatio 图片裁剪比例 默认值 &#xff1a;NaN作用&#xff1a;图片裁剪比例值&#xff1a;自定义裁剪比例&#xff0c;例如1 / 1 , 4 / 3 , 16 / 9等 viewMode 裁剪模式 默认…