15届蓝桥杯第二期模拟赛题单详细解析

文章目录

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

🧡🧡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/747502.shtml

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

相关文章

携手共进办公网络安全

一、引言 在数字化时代的今天&#xff0c;办公网络安全问题已日益成为企业发展的重要课题。随着信息技术的快速发展&#xff0c;网络安全威胁也呈现出多样化、复杂化的趋势。这些危害可能源于网络本身的漏洞、人为因素或外部威胁&#xff0c;给企业的信息安全和正常运营带来严…

游戏组队新姿势!Xinstall一键拉起,好友秒速加入你的战队!

在如今的游戏世界中&#xff0c;与好友一起组队开黑已成为一种潮流。然而&#xff0c;繁琐的组队过程往往让玩家们望而却步。这时&#xff0c;你需要一款强大的辅助工具——Xinstall&#xff0c;它是一站式App全渠道统计服务商&#xff0c;专注于提供App传参安装、全渠道广告效…

springboot274基于web的电影院购票系统

电影院购票系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装电影院购票系统软件来发挥其高效…

strcmp的模拟实现

一&#xff1a;strcmp函数的定义&#xff1a; strcmp函数功能的解释&#xff1a; 比较两个字符串的大小&#xff08;按照字符串中字符的ascll码值&#xff09;。 标准规定&#xff1a; 第一个字符串大于第二个字符串&#xff0c;则返回大于 0 的数字 第一个字符串等于第二个…

市场复盘总结 20240315

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

【Linux】IPC-信号

&#x1f4bb;文章目录 &#x1f4c4;前言信号概念信号阻塞概念 信号的处理信号的使用 &#x1f4d3;总结 &#x1f4c4;前言 信号&#xff0c;一种无论是生活还是编程都离不开的东西。生活中&#xff0c;我们通过信号来对外部发生的事情进行反应&#xff0c;就好像你的手机来了…

Vue.js+SpringBoot开发个人健康管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健康咨询模块 三、系统展示四、核心代码4.1 查询健康档案4.2 新增健康档案4.3 查询体检档案4.4 新增体检档案4.5 新增健康咨询 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…

程序员必备开发工具、程序员必备集成开发环境(IDE)

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

CTP-API开发系列之十:v6.7.0-Python版封装(Windows/Linux)(附源码)

CTP-API开发系列之十&#xff1a;v6.7.0-Python版封装&#xff08;Windows/Linux&#xff09;&#xff08;附源码&#xff09; CTP-API开发系列之十&#xff1a;v6.7.0-Python版封装&#xff08;Windows/Linux&#xff09;&#xff08;附源码&#xff09;资源获取准备工作Windo…

2023年全球软件质量效能大会(QECon上海站):智慧碰撞,质量与效能的新篇章(附大会核心PPT资料下载)

在数字化浪潮席卷全球的今天&#xff0c;软件行业正以前所未有的速度发展。作为推动这一进程的重要力量&#xff0c;软件质量与效能的提升显得尤为关键。2023年全球软件质量&效能大会&#xff08;QECon上海站&#xff09;的盛大召开&#xff0c;无疑为业界提供了一次难得的…

【b站咸虾米】2 Vue基础(上) 2021最新Vue从基础到实例高级_vue2_vuecli脚手架博客案例

课程地址&#xff1a;【2021最新Vue从基础到实例高级_vue2_vuecli脚手架博客案例】 https://www.bilibili.com/video/BV1pz4y1S7bC/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2 Vue基础 上 2.0 补充知识 2.0.1 Vue实例的作用范围 2.0.2 t…

50、东北大学、阿尔伯塔大学:Hi-GCN从2个层次角度进行图学习,用来诊断脑部疾病[你这和MVS-GCN套娃呢?]

本文由东北大学医学图像智能计算教育部重点实验室&#xff0c;加拿大阿尔伯塔大学于2020年10.24日发表于<Computers in Biology and Medicine> JCR\IF: Q1\7.7 Abstract&#xff1a; 目的:近年来&#xff0c;脑连接网络已被用于神经系统疾病的分类&#xff0c;如自闭症…

【论文翻译】UP-DETR—Unsupervised Pre-training for Detection Transformers

0.论文摘要 摘要——通过Transformer model编码器——解码器架构&#xff0c;用于目标检测的检测Transformer model&#xff08;DETR&#xff09;达到了与Faster R-CNN相比具有竞争力的性能。然而&#xff0c;使用scratch transformers训练&#xff0c;DETR需要大规模的训练数…

【docker】docker的常用命令

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;中间件 ⛺️稳中求进&#xff0c;晒太阳 常规命令 docker version #查看docker 版本信息docker info #显示docker 的系统信息&#xff0c;包括镜像和容器数量docker --help #查看所有的命…

如何发布新闻稿?如何让媒体记者报道自己的企业?

目前&#xff0c;很多企业和个人创业者都知道用新闻稿或软文来做宣传&#xff0c;但是一般只可以发布到自己的微信公众号、百家号等自媒体平台&#xff0c;往往收效甚微。有企业找到小马识途营销顾问咨询原因&#xff0c;小马识途营销顾问分析自媒体上发软文效果不明显的原因主…

【超图】SuperMap如何使知识图谱与BIM数据的绑定

作者&#xff1a;taco 近两年知识图谱的概念突然大火了起来&#xff0c;随之而来的就是用户的各种需求&#xff0c;你们的知识图谱能干什么呢&#xff1f;知识图谱有哪些应用呢&#xff1f;在结合客户的一些需求&#xff0c;以及自身的一些想法&#xff0c;写下这篇文章。 一、…

MySQL的insert-on-duplicate语句详解

一、insert-on-duplicate语句语法 注意&#xff1a;ON DUPLICATE KEY UPDATE只是 MySQL的特有语法&#xff0c;并不是SQL标准语法&#xff01; INSERT INTO … ON DUPLICATE KEY UPDATE 是 MySQL 中一种用于插入数据并处理重复键冲突的语法。 这个语法适用于在 insert的时候…

抖音直播招聘的主要优势有哪些?

触达广泛受众抖音拥有海量活跃用户,通过直播可以瞬间吸引大量观众关注。相比传统招聘渠道,抖音直播能够触达到更广泛、更多样化的人才群体。 提升品牌形象在直播中,企业可以展现自身独特的企业文化和价值观,增强与观众的互动交流,有助于提升品牌形象和美誉度。 精准招聘定位企业…

Java项目:53 springboot校园管理系统的设计与实现014

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 1、关于校园管理系统的基本要求&#xff1a; &#xff08;1&#xff09;功能要求&#xff1a;可以管理首页、个人中心、院校管理、用户管理、单位类别…

Spirngboot中文乱码解决方案

在使用springboot的时候,如果我们直接在控制器里面返回中文, 则默认可能会是乱码,因为默认的编码是ISO8859-1, 要解决这个问题, 就需要我们通过重写springboot里面的configureMessageConverters方法来将默认的编码设置为utf-8即可解决, 当然你的类文件编码也必须要是utf-8的, …