15届蓝桥杯第二期模拟赛所有题目解析

news2024/11/26 2:48:15

文章目录

    • 🧡🧡t1_求余🧡🧡
      • 思路
      • 代码
    • 🧡🧡t2_灌水🧡🧡
      • 思路
      • 代码
    • 🧡🧡t3_字符显示🧡🧡
      • 思路
      • 代码
    • 🧡🧡t4_区间最大和🧡🧡
      • 思路
      • 代码
    • 🧡🧡t5_转换次数🧡🧡
      • 思路
      • 代码
    • 🧡🧡t6_数位和相等🧡🧡
      • 思路
      • 代码
    • 🧡🧡t7_公约移动🧡🧡
      • 思路
      • 代码
    • 🧡🧡t8_循环位移🧡🧡
      • 思路
      • 代码
    • 🧡🧡t9_最多约数🧡🧡
      • 思路
      • 代码
    • 🧡🧡t10_最后的元音🧡🧡
      • 思路
      • 代码
    • 🧡🧡t11_最大落差🧡🧡
      • 思路
      • 代码

其他两期题目解析👇
15届蓝桥杯第一期模拟赛题单详细解析
15届蓝桥杯第三期模拟赛题单详细解析

🧡🧡t1_求余🧡🧡

在这里插入图片描述

思路

  • 方法1: 2 2023 2^{2023} 22023数太大了,现有的long类型无法存储,但是题目只问这个数除以1000的余数,因此答案只和这个大数的最后3位数有关,可以模拟逐渐×2的过程,其中每一次都截取最后3位数。
  • 方法2:当然,java中也可以用BigInteger来存储这个数,再配合pow和mod方法也能求出答案。

代码

import java.math.BigInteger;

public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// ============方法1==============
		int two = 1; // 2^0
		int ans = 0;
		for (int i = 1; i <= 2023; i++) {
			two *= 2;
			ans = two % 1000;
			two = two % 1000;
		}
		System.out.println(ans);

		// =============方法2=============
		BigInteger base = new BigInteger("2");
		BigInteger exponent = new BigInteger("2023");
		BigInteger big2 = base.pow(exponent.intValue());
		// 求余数
		BigInteger modulus = new BigInteger("1000");
		BigInteger remainder = big2.mod(modulus);
		System.out.println(remainder);
	}

}

🧡🧡t2_灌水🧡🧡

问题描述
小蓝有一个 01 短阵。他打算将第一行第一列的0变为2。变化过程有传染性,每次2 的上下左右四个相邻的位置中的0都会变成2。直到最后每个2的周围都是1或2 结束。
请问,最终矩阵中有多少个2?
以下是小蓝的矩阵,共 30 行 40 列。

0000100010000001101010101001001100000011
0101111001111101110111100000101010011111
1000010000011101010110000000001011010100
0110101010110000000101100100000101001001
0000011010100000111111001101100010101001
0110000110000000110100000000010010100011
0100110010000110000000100010000101110000
0010011010100110001111001101100110100010
1111000111101000001110010001001011101101
0011110100011000000001101001101110100001
0000000101011000010011111001010011011100
0000100000011001000100101000111011101100
0010110000001000001010100011000010100011
0110110000100011011010011010001101011011
0000100100000001010000101100000000000010
0011001000001000000010011001100101000110
1110101000011000000100011001001100111010
0000100100111000001101001000001010010001
0100010010000110100001100000110111110101
1000001001100010011001111101011001110001
0000000010100101000000111100110010101101
0010110101001100000100000010000010110011
0000011101001001000111011000100111010100
0010001100100000011000101011000000010101
1001111010010110011010101110000000101110
0110011101000010100001000101001001100010
1101000000010010011001000100110010000101
1001100010100010000100000101111111111100
1001011010101100001000000011000110110000
0011000100011000010111101000101110110001

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

思路

坐标+感染,考虑直接BFS搜索,每个位置的往上下左右四个方向探索前,注意判断方向合法性只有0的地方才能感染

代码

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

public class Main {
	public static class Node {
		int x, y;

		public Node(int x, int y) {
			this.x = x;
			this.y = y;
		}
	}

	public static Deque<Node> deque = new ArrayDeque<>();
	public static char[][] grid = new char[35][45];
	public static int[] dx = { -1, 1, 0, 0 };
	public static int[] dy = { 0, 0, -1, 1 };

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		for (int i = 1; i <= 30; i++) {
			String s = sc.next();
			for (int j = 1; j <= 40; j++) {
				grid[i][j] = s.charAt(j - 1);
			}
		}
//		System.out.println(Arrays.deepToString(grid));

		deque.addLast(new Node(1, 1));

		while (!deque.isEmpty()) {
			Node node = deque.removeLast();
			int x = node.x;
			int y = node.y;
			grid[x][y] = '2';
			for (int i = 0; i < 4; i++) {
				int tx = x + dx[i];
				int ty = y + dy[i];
				if (tx < 1 || tx > 30 || ty < 1 || ty > 40)
					continue;
				if (grid[tx][ty] != '0')
					continue;
				deque.addLast(new Node(tx, ty));
			}
		}
		int ans = 0;
		for (char[] row : grid) {
			for (char c : row) {
				if (c == '2')
					ans++;
			}
		}

		System.out.println(ans); // 541
	}
}

🧡🧡t3_字符显示🧡🧡

问题描述
小蓝要在屏幕上放置一行文字,每个字的宽度相同。
小蓝发现,如果每个字的宽为 36 像素,一行正好放下 30 个字,字符之间和前后都没有任何空隙。
请问,如果每个字宽为 10 像素,字符之间不包含空隙,一行可以放下多少个字?

思路

小学数学。。。。

代码

public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(36 * 30 / 10);
	}
}

🧡🧡t4_区间最大和🧡🧡

  • 问题描述
    给定一个序列 a[1],α[2],…,a[n]和一个整数k,请找出一个长度正好为 k 的区间,使得区间中所有数的和最大。
    即要找到一个整数p,使得1≤p且p+k-1≤n,使得a[p]+a[p+1]+···+a[p+k-1]最大。
  • 输入格式
    输入的第一行包含两个整数 n,た。
    第二行包含 , 个整数,相邻的整数之间使用一个空格分隔,表示给定的序列。
  • 输出格式
    输出一行包含一个整数,表示最大的区间和,你只需要输出和就行不需要输出方案。
  • 样例
6 3
2 3 9 1 9 5
19

在这里插入图片描述

思路

最大n为 1 0 5 10^5 105,暴力法的两层for会超时,这正是前缀和所要解决的问题:以O(n)复杂度查询某个区间之和。
另外,考虑输入数据也蛮多的,用StreamTokenizer输入,加加速。

代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

public class Main {
	public static final int N = 100010;
	public static int[] arr = new int[N];
	public static long[] s = new long[N];

	public static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

	public static int ini() throws IOException {
		st.nextToken();
		return (int) st.nval;
	}

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		int n = ini();
		int k = ini();
		for (int i = 1; i <= n; i++) {
			arr[i] = ini();
		}
		for (int i = 1; i <= n; i++) {
			s[i] = s[i - 1] + arr[i];
		}

		long maxv = Long.MIN_VALUE;

		for (int i = 1; i <= n - k + 1; i++) {
			maxv = Math.max(maxv, s[i + k - 1] - s[i - 1]);
		}
		System.out.println(maxv);
	}
}

🧡🧡t5_转换次数🧡🧡

  • 问题描述
    给定一个整数,对这个整数的一次转换是指将这个整数变为这个整数的所有数位上的非零数字的乘积。
    例如,对123456789进行-次转换变为1x2x3x4x5x6x7x8x9=362880,再进行次转换变为3x6x2x8x8=2304,再进行次转换变为2x3x4=24,再进行次转换变为 8。
    给定一个整数,请依次将转换过程中经历的每个整数输出,直到小于10
  • 输入格式
    输入一行包含一个整数 n 。
  • 输出格式
    输出多行,每行包含一个整数。
  • 样例
123456789
362880
2304
24
8

在这里插入图片描述

思路

简单模拟,又是取某个数的每一位数这个操作,蓝桥杯考的太多了。

代码

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long n = sc.nextLong();
		while (n >= 10) {
			long mul = 1;
			while (n > 0) {
				if (n % 10 != 0)
					mul *= n % 10;
				n /= 10;
			}
			n = mul;
			System.out.println(mul);
		}
	}
}

🧡🧡t6_数位和相等🧡🧡

  • 问题描述
    如果一个正整数转化成二进制与转换成八进制后所有数位的数字之和相等,则称为数位和相等的数。
    前几个数位和相等的正整数为 1,8,9,64…
    请问第 23 个数位和相等的正整数是多少?

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

思路

java中可以用Integer.toBinaryString和Integer.toOctalString转二进制和八进制,再比对判断即可。

代码

public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int cnt = 0;
		for (int i = 1; i <= 1000000; i++) {
			String bin = Integer.toBinaryString(i);
			String oct = Integer.toOctalString(i);

			int bin_sum = 0;
			int oct_sum = 0;

			for (int j = 0; j < bin.length(); j++) {
				bin_sum += bin.charAt(j) - '0';
			}
			for (int j = 0; j < oct.length(); j++) {
				oct_sum += oct.charAt(j) - '0';
			}

			if (bin_sum == oct_sum)
				cnt++;
			if (cnt == 23) {
				System.out.println(i); //4169
				break;
			}
		}
	}
}

🧡🧡t7_公约移动🧡🧡

  • 问题描述
    小蓝站在一个 n 行 m 列的方格图中间,方格图的每一个方格上都标有一个正整数。
    如果两个相邻方格(上下左右四个方向相邻)内的数的最大公约数大于1,则可以从其中一个方格移动到另一个方格,当然也可以从另一个方格移回第一个方格。
    假设小蓝开始时站在第r行第c列,请问小蓝可以移动到方格图内的多少个方格?
  • 输入格式
    输入的第一行包含两个整数n,m ,用一个空格分隔,表示方格图的行数和列数。
    接下来 n 行,每行包含 m 个正整数,相邻整数间用一个空格分隔,依次表示方格图中从第 1 行到第 n行,每行从第 1列到第 m 列中的数。
    接下来一行包含两个整数 r, c,用一个空格分隔,表示小蓝所在的行号和列号。
  • 输出格式
    输出一行包含一个整数,表示答案。
  • 样例
3 4
3 6 5 5
2 4 3 5
7 8 3 8
3 2
5

在这里插入图片描述

思路

跟前面t2_灌水问题类似,t2_灌水中每个坐标的上下左右四个相邻位置中为0即可感染,而这题中每个坐标的上下左右四个相邻位置满足最大公约数>1即可“感染“,然后统计数目就行,因此也可以采用bfs来做。 当然也能用dfs来做,这里我顺便练习dfs了。
另外,还是要背背用欧几里得法求最大公约数gcd的代码,挺常用的。

代码

import java.util.Scanner;
public class Main {

	public static long gcd(long n1, long n2) {
		while (n2 != 0) {
			long res = n1 % n2; // 余数
			n1 = n2;
			n2 = res;
		}
		return n1;
	}

	public static int[][] grid = new int[1005][1005];
	public static boolean[][] used = new boolean[1005][1005];
	public static int[] dx = { -1, 1, 0, 0 };
	public static int[] dy = { 0, 0, -1, 1 };
	public static int cnt = 0;
	public static int n, m;

	public static void dfs(int x, int y) {
		// System.out.println(x + " " + y);
		used[x][y] = true;
		cnt++;
		for (int k = 0; k < 4; k++) {
			int tx = x + dx[k];
			int ty = y + dy[k];
			if (tx < 1 || tx > n || ty < 1 || ty > m)
				continue;
			if (used[tx][ty])
				continue;
			if (gcd(grid[x][y], grid[tx][ty]) <= 1)
				continue;
			dfs(tx, ty);
//			System.out.println("回溯:" + tx + " " + ty);
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		m = sc.nextInt();

		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				grid[i][j] = sc.nextInt();
			}
		}
		int r = sc.nextInt();
		int c = sc.nextInt();
		dfs(r, c);
		System.out.println(cnt);

	}
}

🧡🧡t8_循环位移🧡🧡

在这里插入图片描述

思路

小学数学,考察模运算和除运算的区别,这里总结一下吧:

  • % 模运算:x%10就是 x 的最后一位,x%1000就是 x的最后三位,以此类推。。
  • / 除运算:x/10就是去掉 x 的最后一位,x/1000就是去掉 x的最后三位,以此类推。。

代码

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt();
		System.out.println((x % 100000) * 10 + (x / 100000));
	}
}

🧡🧡t9_最多约数🧡🧡

在这里插入图片描述

思路

求约数个数,即%==0的个数。

代码


public class Main {

	public static int[] arr = { 393353, 901440, 123481, 850930, 423154, 240461, 373746, 232926, 396677, 486579, 744860,
			468782, 941389, 777714, 992588, 343292, 385198, 876426, 483857, 241899, 544851, 647930, 772403, 109929,
			882745, 372491, 877710, 340000, 659788, 658675, 296521, 491295, 609764, 718967, 842000, 670302, };

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

		int maxv = -1;
		int ans = 0;
		for (int i = 0; i < 36; i++) {
			int cnt = 0;
			for (int j = 1; j <= arr[i]; j++) {
				if (arr[i] % j == 0)
					cnt++;
			}
			if (cnt > maxv) {
				maxv = cnt;
				ans = arr[i];
			}
		}
		System.out.println(ans);
	}
}

🧡🧡t10_最后的元音🧡🧡

在这里插入图片描述

思路

easy

代码

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		char ans = 'a';
		for (char c : s.toCharArray()) {
			if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
				ans = c;
		}
		System.out.println(ans);
	}
}

🧡🧡t11_最大落差🧡🧡

在这里插入图片描述

思路

简单遍历数组即可,可以稍微简写代码:边输入边检查。

代码

import java.util.Scanner;
public class Main {
	public static int[] arr = new int[1005];

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();

		int max_leep = -1;
		boolean flag = false;
		for (int i = 1; i <= n; i++) {

			arr[i] = sc.nextInt();
			if (i > 1 && arr[i] < arr[i - 1]) {
				max_leep = Math.max(max_leep, arr[i - 1] - arr[i]);
				flag = true;
			}
		}
		if (flag)
			System.out.println(max_leep);
		else
			System.out.println(0);
	}
}

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

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

相关文章

Mysql:行锁,间隙锁,next-key锁?

注&#xff1a;以下讨论基于InnoDB引擎。 文章目录 问题引入猜想1&#xff1a;只加了一行写锁&#xff0c;锁住要修改的这一行。语义问题数据一致性问题 猜想2&#xff1a;要修改的这一行加写锁&#xff0c;扫描过程中遇到其它行加读锁猜想3&#xff1a;要修改的这一行加写锁&…

[ C++ ] STL---list的使用指南

目录 list简介 list的常用接口 构造函数 赋值运算符重载 迭代器 容量相关接口 元素访问接口 修改相关接口 头插push_front() 头删pop_front() 尾插push_back() 尾删pop_back() insert() erase() list的迭代器失效 list简介 1. list是可以以O(1)的时间复杂度在任意…

ORACLE 上机操作3-1

sqlplus / as sysdba 显示parameter结构 SQL> set pause on SQL> desc v$parameter 显示系统静态参数 SQL> select name from v$parameter where isses_modifiable FALSE; 显示db_files是否可以用命令修改 SQL> select isses_modifiable, issys_modifiable, ismod…

使用 OpenAI 的 Embedding模型 构建知识向量库并进行相似搜索

OpenAI的embedding模型的使用 首先第一篇文章中探讨和使用了ChatGPT4的API-Key实现基础的多轮对话和流式输出&#xff0c;完成了对GPT-API的一个初探索&#xff0c;那第二步打算使用OpenAI的embedding模型来构建一个知识向量库&#xff0c;其实知识向量库本质上就是一个包含着一…

四、HarmonyOS应用开发-ArkTS开发语言介绍

目录 1、TypeScript快速入门 1.1、编程语言介绍 1.2、基础类型 1.3、条件语句 1.4、函数 1.5、类 1.6、模块 1.7、迭代器 2、ArkTs 基础&#xff08;浅析ArkTS的起源和演进&#xff09; 2.1、引言 2.2、JS 2.3、TS 2.4、ArkTS 2.5、下一步演进 3、ArkTs 开发实践…

【Linux】网络基础一

网络基础一 1.计算机网络背景1.1 网络发展1.2 认识 “协议” 2.网络协议初识2.1 协议分层2.2 OSI七层模型2.3 TCP/IP五层(或四层)模型 3. 网络传输基本流程3.1 网络传输流程图 4.数据包封装和分用5.网络中的地址管理 从今天开始我们将要从系统横跨到网络的学习了&#xff0c;因…

微信支付宝--充ChatGPTPLUS/openAI key

ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够基于在预训练阶段所见的模式和统计规律&#xff0c;来生成回答&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;甚至能完成撰写论文、邮件、脚本、文案、翻译、代码等…

MFC界面美化第四篇----自绘list列表(重绘列表)

1.前言 最近发现读者对我的mfc美化的专栏比较感兴趣&#xff0c;因此在这里进行续写&#xff0c;这里我会计划写几个连续的篇章&#xff0c;包括对MFC按钮的美化&#xff0c;菜单栏的美化&#xff0c;标题栏的美化&#xff0c;list列表的美化&#xff0c;直到最后形成一个完整…

【Python】反编译PyInstaller打包的exe

查看exe基本信息 需要反编译的exe 查看exe文件的打包工具&#xff0c;查看exe信息的软件叫Detect It Easy(查壳工具) 由图我们可以看出当前选中的exe文件是由名叫PyInstaller的打包工具打包好的exe 反编译 exe反编译工具&#xff1a;pyinstxtractor.py 使用方法 python py…

VMWare虚拟机使用openmediavault搭建NAS服务器完整步聚

下载: gopenmediavault - The open network attached storage solution 下载好openmediavault的ISO镜像后,打开虚拟机并安装 系统类型选择Debian 启动虚拟机并安装openmediavault 选择中文 地区选中国 键盘配置选汉语 开始安装 配置网络信息 配置root密码 确认密码 系统安装中…

spark基本原理UI界面解读

这里是引用 1 八股文 1.1 基本原理 driver节点是整个应用程序的指挥所 指挥官是sparkcontext 环境&#xff1a;构建一个集群 应用程序提交 确定主节点&#xff0c;确定指挥所driver&#xff0c;确定指挥官sparkcontext sparkcontext会向资源管理器申请资源 会将作业分…

英伟达出品:全球最强大芯片Blackwell来了!采用4nm制程,2080 亿个晶体管组,支持10万亿参数模型

更多精彩内容在 美国加利福尼亚州圣何塞 —— 2024 年 3 月 18 日 —— NVIDIA 于今日宣布推出 NVIDIA Blackwell 平台以赋能计算新时代。该平台可使世界各地的机构都能够在万亿参数的大语言模型&#xff08;LLM&#xff09;上构建和运行实时生成式 AI&#xff0c;其成本和能耗…

机器视觉系统选型-精度计算

eg&#xff1a;1.康耐视500w相机拍照&#xff0c;视野为50mm40mm&#xff0c;所使用的视觉工具精度为个像素&#xff0c;求测量精度&#xff1f;&#xff08;500w相机分辨率为25921944&#xff09; 相机精度:(即像素分辨率) 相机精度50mm/25920.0193mm 测量精度&#xff1a;测量…

Source Insight使用-添加新的文件类型

目录 遇到的问题解决方法结果 遇到的问题 在Source Insight中我们通常查看.c和.h文件&#xff0c;当使用其查看.java 或者.hal等类型文件时&#xff0c;发现找不到 解决方法 以添加.hal文件为例: 选择Options 下面的File Type Options… 选项。 点击左侧的 “C/C Source F…

mysql索引实现

什么是索引失效 在MySQL中&#xff0c;索引失效指的是查询语句无法有效地使用索引&#xff0c;而必须进行全表扫描。索引失效可能会导致查询性能下降&#xff0c;特别是在处理大量数据时。 索引失效的原因 1.索引列进行了运算或函数操作 如果对索引列进行了运算或使用了函数…

Linux命令进程管理工具top、ps、jps和tar以及守护进程nohup

进程管理工具top ps 概述 top 和 ps 是 Linux 系统中两个非常重要的用于管理和监控进程的命令工具。以下是它们的主要功能和区别&#xff1a; top&#xff1a; 动态视图&#xff1a;top 提供了一个实时动态更新的视图&#xff0c;能够持续显示系统中当前正在运行的进程信息及其…

软考 网工 每日学习打卡 2024/3/19

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论&#xff0c;在此基础上深入理解网络安全协议的工作原理&#xff0c;并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

C++ —— 类和对象(终)

目录 1. 日期类的实现 1.1 前置 和 后置 重载 1.2 >> 和 << 的重载 2. const 成员 3. 取地址及const取地址操作符重载 4. 再谈构造函数 4.1 构造函数体赋值 4.2 初始化列表 4.3 隐式类型转换 4.4 explict 关键字 5. static 成员 5.1 概念 5.2 特性 …

Java 的强引用、弱引用、软引用、虚引用

1、强引用&#xff08;StrongReference&#xff09; 强引用是使用最普遍的引用。如果一个对象具有强引用&#xff0c;那垃圾回收器绝不会回收它。如下&#xff1a; Object onew Object(); // 强引用 当内存空间不足&#xff0c;Java虚拟机宁愿抛出OutOfMemoryError错误&am…

Java多线程实战-CompletableFuture异步编程优化查询接口响应速度

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️本系列源码仓库&#xff1a;多线程并发编程学习的多个代码片段(github) &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正…