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^0int 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 stubScanner 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 stubSystem.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 stubint 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 stubScanner 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 stubint 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); //4169break;}}}
}

🧡🧡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 stubScanner 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 stubScanner 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 stubint 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 stubScanner 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 stubScanner 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);elseSystem.out.println(0);}
}

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

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

相关文章

yum安装mysql、数据库tab自动补全

一 centos7上面没有mysql&#xff0c;它的数据库名字叫做mariadb &#xff08;自带 5.7版本&#xff09; 一 centos7 安装mariadb [rootlocalhost ~]#yum install mariadb-server -y [rootlocalhost ~]#systemctl start mariadb.service [rootlocalhost ~]#systemctl stop f…

linux之权限管理和组

一&#xff0c;ACL权限 1.1&#xff0c;什么是acl权限&#xff1f; ACL是Access Control List的缩写&#xff0c;即访问控制列表。可以通过下列的实例来理解ACL的作用&#xff1a; 思考如何实现如下的权限控制&#xff1a; 每个项目成员在有一个自己的项目目录&#xff0c;…

SMART PLC升降温速率计算

1、单自由度增量式PID温度控制系统框图(数字量PWM输出) https://rxxw-control.blog.csdn.net/article/details/136732932https://rxxw-control.blog.csdn.net/article/details/136732932 1、温度监测1 2、温度监测2 待续...

Windows Terminal配置 美化

Windows 终端自定义提示符设置 | Microsoft Learn 安装PowerShell7 在 Windows 上安装 PowerShell - PowerShell | Microsoft Learn 设置默认为 PowerShell7 安装 在powerShell 开启远程权限 Set-ExecutionPolicy RemoteSigned -scope CurrentUserscoop 执行 iwr -useb ht…

[BX]和loop指令

文章目录 [BX]和loop指令1 [bx]2 Loop指令3 在Debug中跟踪用loop指令实现的循环程序4 Debug和汇编编译器Masm对指令的不同处理5 loop和[bx]的联合应用6 段前缀7 一段安全的空间8 段前缀的使用 [BX]和loop指令 1 [bx] 我们用[bx]表示一个内存单元&#xff0c;它的段地址默认在…

腾讯云服务器多少钱一个月?5元1个月,这价格没谁了

2024腾讯云服务器多少钱一个月&#xff1f;5元1个月起&#xff0c;腾讯云轻量服务器4核16G12M带宽32元1个月、96元3个月&#xff0c;8核32G22M配置115元一个月、345元3个月&#xff0c;腾讯云轻量应用服务器61元一年折合5元一个月、4核8G12M配置646元15个月、2核4G5M服务器165元…

力扣1. 两数之和

思路&#xff1a;用一个map存放 已遍历过的元素和下标&#xff1b; 若当前元素是nums[i], 且该元素的另一半 target-nums[i] 在已遍历过的map里面&#xff0c;则返回两个元素的下标&#xff1b; class Solution {public int[] twoSum(int[] nums, int target) {int[] ans new…

5年经验之谈 —— 总结自动化测试与性能测试的区别!

很多刚刚接触自动化测试和性能测试的同学感觉性能测试和自动化测试是没什么区别的&#xff0c;就像小编刚刚接触自动化测试和性能测试的时候一样&#xff0c;区别就是&#xff1a;自动化测试是一个用户在测试&#xff0c;而性能测试需要并发&#xff0c;需要设计各种场景。测试…

单目测距那些事儿(上) _ 从MobileEye谈起

单目测距那些事儿(上) | 从MobileEye谈起 全面专业的自动驾驶学习资料:链接 前言 在ADAS领域&#xff0c;有个功能叫自适应巡航控制(Adaptive Cruise Control, ACC)。 ACC是一种纵向距离控制&#xff0c;具体包括发现目标车辆、判断目标车辆所在路径、测量相对本车的距离和速…

Vulnhub靶机渗透:DC-7打靶记录

前言 自信自强&#xff0c;来自于不怕苦、不怕难的积淀。宝剑锋从磨砺出&#xff0c;梅花香自苦寒来&#xff1b;任何美好理想&#xff0c;都离不开筚路蓝缕、手胼足胝的艰苦奋斗&#xff01; 靶场介绍 DC-7是一个初中级的靶场&#xff0c;需要具备以下前置知识&#xff1a;…

计算机缺失msvcp110.dll如何修复,多种修复方法教给你

当电脑系统中msvcp110.dll文件丢失时&#xff0c;可能会对计算机的正常运行产生一系列显著的影响。msvcp110.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;这个动态链接库文件对于许多基于Windows的应用程序至关重要&#xff0c;尤其是一些使用C编译器…

什么是CPQ?CPQ报价管理软件面向制造企业快速报价解决方案

什么是CPQ&#xff1f; CPQ生产配置报价系统是面向生产加工企业&#xff0c;为企业市场部门提供快速报价的辅助系统&#xff0c;和配置报价系统不同的是生产报价系统成本的组成并不是标准的产品成本&#xff0c;其成本可能包含原材料成本、原材料损耗、制造成本、包装成本、运…

YOLOv9改进策略:卷积魔改 | AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a; YOLOv9如何魔改卷积进一步提升检测精度&#xff1f;AKConv 通过不规则卷积运算完成高效特征提取的过程&#xff0c;为卷积采样形状带来更多探索选择。 AKConv可以作为即插即用的卷积运算来替代卷积运算来提高…

市场复盘总结 20240319

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 17% 最常用的…

Unity发布webgl设置占满浏览器运行

Unity发布webgl设置占满浏览器运行 Unity发布webgl的时候index.html的模板文件 模板文件路径&#xff0c;根据自己的需求修改。 C:\Program Files\Unity\Hub\Editor\2021.1.18f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\WebGLTemplates\Default再桌面新建一个t…

Transformer的前世今生 day04(ELMO

ELMO 前情回顾 NNLM模型&#xff1a;主要任务是在预测下一个词&#xff0c;副产品是词向量Word2Vec模型&#xff1a;主要任务是生成词向量 CBOW&#xff1a;训练目标是根据上下文预测目标词Skip-gram&#xff1a;训练目标是根据目标词预测上下文词 ELMO模型的流程 针对Wor…

想提升职场形象?收下这3种工作中常用的邮件问候语吧!

发给老板、同事或跨部门同事的第一行邮件就会为你的整封邮件定下基调。开场白揭示了你写电子邮件时的许多情绪状态&#xff1a;它们可能传达出自信&#xff0c;增强团队成员之间的信任度。或者起到反作用&#xff1a;语气上的不足可能会影响士气并造成混乱。 因此&#xff0c;…

MySQL的概述与安装

一、数据库的基本概念&#xff1a; 1.1 数据&#xff1a; 1&#xff09; 描述事物的符号记录称为数据&#xff08;Data&#xff09;。数字、文字、图形、图像、声音、档案记录等 都是数据。 2&#xff09;数据是以“记录”的形式按照统一的格式进行存储的&#xff0c;而不是…

openEuler 欧拉系统nginx正向代理 http https —— 筑梦之路

正向代理 Nginx正向代理&#xff0c;通过服务器代理客户端去重定向请求访问到目标服务器的一种代理服务。对于目标服务器来说浏览器/客户端是隐藏的。Nginx 正向代理默认只支持http 协议&#xff0c;不支持 https 协议&#xff0c;需借助"ngx_http_proxy_connect_module&q…