第六届蓝桥杯大赛软件赛省赛Java 大学C组题解

文章目录

  • A 隔行变色
    • 思路
    • 解题方法
    • 复杂度
    • Code
  • B 立方尾不变
    • 思路
    • 解题方法
    • 复杂度
    • Code
  • C 无穷分数
    • 思路
    • 解题方法
    • 复杂度
    • Code
  • D 奇妙的数字
    • 思路
    • 解题方法
    • 复杂度
    • Code
  • E 移动距离
    • 思路
    • 解题方法
    • 复杂度
    • Code
  • F 垒骰子
    • 思路
    • 解题方法
    • 复杂度
    • Code

A 隔行变色

思路

这是一个简单的计数问题。我们需要找出21到50之间的奇数数量。奇数行将被染成蓝色,偶数行将被染成白色。

解题方法

我们可以使用一个for循环从21遍历到50,然后使用模运算符(%)来检查每个数字是否为奇数。如果数字是奇数(即,如果数字除以2的余数为1),我们就增加计数器。

复杂度

时间复杂度:

O ( n ) O(n) O(n),其中n是我们需要检查的数字范围的大小。在这种情况下,n是30 ( 50 − 21 + 1 ) (50-21+1) 5021+1

空间复杂度:

O ( 1 ) O(1) O(1),我们只需要一个变量来存储计数。

Code

public class Main {public static void main(String[] args) {// 奇数 蓝色// 偶数 白色int res = 0;for(int i = 21; i <= 50; i++) {if(i % 2 == 1) {res++;}}System.out.println(res);}
}

B 立方尾不变

思路

这个问题是要找出1到10000之间的所有数字,这些数字的立方的尾部数字与原数字相同。例如,如果数字是12,它的立方是1728,尾部两位数字是12,与原数字相同。

解题方法

我们可以使用一个for循环从1遍历到10000,然后计算每个数字的立方。然后,我们将立方和原数字都转换为字符串,比较立方的尾部数字是否与原数字相同。

复杂度

时间复杂度:

O ( n ) O(n) O(n),其中n是我们需要检查的数字范围的大小。在这种情况下,n是10000。

空间复杂度:

O ( 1 ) O(1) O(1),我们只需要几个变量来存储计数和临时结果。

Code

public class Main {static int MAXN = (int) 1e4;public static void main(String[] args) {int res = 0;for (int i = 1; i <= MAXN; i++) {if (deal(i)) {res++;}}System.out.println(res);}private static boolean deal(int x) {// TODO Auto-generated method stublong num = (long) x * x * x;String s = num + "";String t = x + "";int len = t.length();return s.substring(s.length() - len).equals(t);}}

C 无穷分数

思路

这个问题是要计算一个无穷分数序列的值。这个序列的形式是 1 + 2 / ( 3 + 4 / ( 5 + 6 / ( 7 + . . . ) ) ) 1 + 2/(3 + 4/(5 + 6/(7 + ...))) 1+2/(3+4/(5+6/(7+...)))。我们可以从最内层的分数开始,逐步向外计算。

解题方法

我们可以使用一个for循环从10000逆序遍历到1。对于每个i,我们计算(i - 1) + (i / res),其中res是前一步的结果。最初的res是98.0 + 99.0 / 100.0,对应于序列的最内层的分数。

复杂度

时间复杂度:

O ( n ) O(n) O(n),其中n是我们需要计算的分数的数量。在这种情况下,n是10000。

空间复杂度:

O ( 1 ) O(1) O(1),我们只需要一个变量来存储计算结果。

Code

public class Main {public static void main(String[] args) {double res = 98.0 + 99.0 / 100.0;for(double i = 10000; i >= 1; i--) {res = (i - 1) + (i / res);}System.out.printf("%.5f",res);}}

D 奇妙的数字

思路

这个问题是要找出1到1000之间的第一个数字,这个数字的平方和立方的每一位数字都是唯一的,并且0到9的每个数字都在这个数字的平方或立方中至少出现一次。

解题方法

我们可以使用一个for循环从1遍历到1000,然后计算每个数字的平方和立方。然后,我们将平方和立方都转换为字符串,检查每一位数字是否唯一,并且0到9的每个数字都至少出现一次。

复杂度

时间复杂度:

O ( n ) O(n) O(n),其中n是我们需要检查的数字范围的大小。在这种情况下,n是1000。

空间复杂度:

O ( 1 ) O(1) O(1),我们只需要一个布尔数组来存储每个数字是否出现过。

Code

public class Main {static int MAXN = (int) 1e3;public static void main(String[] args) {for (int i = 1; i <= MAXN; i++) {if (deal(i)) {System.out.println(i);break;}}}private static boolean deal(int x) {// TODO Auto-generated method stubString p2 = (x * x) + "";String p3 = (x * x * x) + "";boolean[] vis = new boolean[10];for (int i = 0; i < p2.length(); i++) {if (vis[p2.charAt(i) - '0']) {return false;} else {vis[p2.charAt(i) - '0'] = true;}}for (int i = 0; i < p3.length(); i++) {if (vis[p3.charAt(i) - '0']) {return false;} else {vis[p3.charAt(i) - '0'] = true;}}for(int i = 0; i <= 9; i++) {if(vis[i] == false) {return false;}}return true;}}

E 移动距离

思路

这是一个二维平面上的移动问题。我们需要找到从点m到点n的最短距离。这个问题的关键在于,我们的移动是在一个特殊的格子系统中进行的,其中每一行的移动方向可能会改变。因此,我们需要分别计算在行和列上的移动距离。

解题方法

我们首先计算出点m和点n在哪一行,然后根据行数的奇偶性确定它们在该行的位置。如果行数是奇数,那么位置就是m或n除以宽度w的余数;如果行数是偶数,那么位置就是宽度w减去m或n除以宽度w的余数再加1。最后,我们计算出行和列上的距离,然后将它们相加,得到总的移动距离。

复杂度

时间复杂度:

O ( 1 ) O(1) O(1)。我们只进行了一些基本的数学运算,所以时间复杂度是常数。

空间复杂度:

O ( 1 ) O(1) O(1)。我们只使用了一些基本的变量,所以空间复杂度也是常数。

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int w, m, n;public static void main(String[] args) throws IOException {w = nextInt();m = nextInt();n = nextInt();int a = (m + w - 1) / w, b = 0, c = (n + w - 1) / w, d = 0;if(((m + w - 1) / w) % 2 == 1) {// 奇数行b = m % w;} else {// 偶数行b = (w - m % w) + 1;}if(((n + w - 1) / w) % 2 == 1) {// 奇数行d = n % w;} else {// 偶数行d = (w - n % w) + 1;}out.println(Math.abs(c - a) + Math.abs(d - b));out.flush();}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}

F 垒骰子

思路

这是一个动态规划问题,我们需要计算在给定的限制下,可以有多少种方式来堆叠骰子。我们可以使用一个矩阵来表示骰子的六个面,然后使用动态规划的方法来计算每一种可能的堆叠方式。

解题方法

我们首先初始化一个6x6的矩阵,然后根据输入的限制来更新这个矩阵。然后我们使用动态规划的方法来计算每一种可能的堆叠方式。我们使用一个循环来遍历所有的骰子,然后在每一次循环中,我们都会更新我们的动态规划矩阵。最后,我们将动态规划矩阵中的所有元素相加,得到最终的结果。

复杂度

时间复杂度:

O ( n 3 ) O(n^3) O(n3)。我们需要遍历所有的骰子,并且在每一次循环中,我们都需要更新我们的动态规划矩阵。

空间复杂度:

O ( n 2 ) O(n^2) O(n2)。我们需要一个6x6的矩阵来存储动态规划的结果。

Code

import java.io.*;
import java.util.Arrays;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static int N = 6, mod = (int)1e9 + 7, n, m;static long[][] A = new long[N][N];static long[][] f = new long[N][N];static int[] op = {3, 4, 5, 0, 1, 2};public static void mul(long[][] a, long[][] b,  long[][] c) {long[][] t = new long[N][N];for (int i = 0; i < N; i ++)for (int j = 0; j < N; j ++)for (int k = 0; k < N; k ++)t[i][j] = (t[i][j] + b[i][k] * c[k][j]) % mod;System.arraycopy(t, 0, a, 0, N);}public static void main(String[] args) throws IOException {String[] s1 = in.readLine().split(" ");n = Integer.parseInt(s1[0]); m = Integer.parseInt(s1[1]);for (int i = 0; i < N; i ++) Arrays.fill(A[i], 4);while (m -- > 0) {String[] s2 = in.readLine().split(" ");int x = Integer.parseInt(s2[0]) - 1, y = Integer.parseInt(s2[1]) - 1;A[x][op[y]] = 0;A[y][op[x]] = 0;}Arrays.fill(f[0], 4);for (int k = n - 1; k > 0; k >>= 1) {if ((k & 1) == 1) mul(f, f, A);mul(A, A, A);}long res = 0;for (int i = 0; i < N; i ++) res = (res + f[0][i]) % mod;out.println(res);out.flush();}
}

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

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

相关文章

<chrono>, clock_gettime(), gettimeofday()对比

精度&#xff08;Precision&#xff09;&#xff1a; <chrono>: 提供了纳秒级别的精度&#xff0c;可以满足大多数应用的需求。clock_gettime(): 提供了纳秒级别的精度&#xff0c;与 <chrono> 相当。gettimeofday(): 提供了微秒级别的精度&#xff0c;相对于前两者…

ruoyi-ui(前端文件夹)

bin文件夹&#xff08;批处理文件&#xff0c;打包、运行&#xff09; build文件夹&#xff08;构建相关&#xff09; public文件夹&#xff08;公共文件&#xff0c;图标、html模板&#xff09; src文件夹&#xff08;前端相关源码&#xff09; api文件夹&#xff08;…

iscsi网络协议(连接硬件设备)

iscsi概念 iscsi是一种互联网协议&#xff0c;用于将存储设备&#xff08;如硬盘驱动器或磁带驱动器&#xff09;通过网络连接到计算机。它是一种存储区域网络&#xff08;SAN&#xff09;技术&#xff0c;允许服务器通过网络连接到存储设备&#xff0c;就像它们是本地设备一样…

区块链技术与大数据结合的商业模式探索

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着区块链技术和大数据技术的不断发展&#xff0c;两者的结合为企业带来了新的商业模式…

探索K最近邻算法:从理论到实践

引言&#xff1a; 在机器学习领域中&#xff0c;有许多经典的算法被用于解决各种问题。其中之一就是K最近邻&#xff08;KNN&#xff09;算法。KNN是一种简单而强大的非参数化学习方法&#xff0c;被广泛用于分类和回归问题。本文将深入探讨KNN算法的原理、应用场景以及如何在实…

科东软件联手英特尔,用工业AI智能机器人赋能工业升级

AI浪潮已经冲击到各行各业中&#xff0c;它能够帮助人们提高思考和生产效率。在创作中&#xff0c;AI能够帮助人们释放创意&#xff0c;那在工业中&#xff0c;AI能够为产业带来什么呢&#xff1f; 科东软件是国内专注于操作系统开发的企业。当前&#xff0c;科东开发的Intewe…

机器学习——贝叶斯分类器(基础理论+编程)

目录 一、理论 1、初步引入 2、做简化 3、拉普拉斯修正 二、实战 1、计算P(c) 2、计算P(x|c) 3、实战结果 1、数据集展示 2、相关信息打印 一、理论 1、初步引入 在所有相关概率都已知的理想情形下&#xff0c;贝叶斯决策论考虑如何基于这些概率和误判损失来选择最…

Jenkins升级中的小问题

文章目录 使用固定版本安装根据jenkins页面下载war包升级jenkins重启jenkins报错问题解决 K8s部署过程中的一些小问题 ##### Jenkins版本小插曲 ​ 在Jenkins环境进行插件安装时全部清一色飘红&#xff0c;发现是因为Jenkins版本过低导致&#xff0c;报错的位置可以找到更新je…

巨控GRM560工业物联网的升级后的功能

巨控GRM560&#xff1a;工业自动化领域的革命者 标签:#工业自动化 #PLC #远程控制 #OPCUA #MQTT 随着工业4.0时代的到来&#xff0c;智能制造已经成为了发展的大势所趋。在这样的背景下&#xff0c;自动化控制系统的核心——可编程逻辑控制器&#xff08;PLC&#xff09;的作用…

JS学习之旅第七天

今天是学习JS的第七天&#xff0c;今天学习了数组&#xff0c;话不多说开始今天的讲解。 一、认识数组 数组是指一组数据的集合&#xff0c;其中的每个数据被称作元素&#xff0c;在数组中可以存放任意类型的元素。数组是一种将一组数据存储在单个变量名下的优雅方式。 1.1创…

shell脚本发布docker-nginx vue2 项目示例

docker、git、node.js安装略过。 使git pull或者git push不需要输入密码操作方法 nginx安装在docker容器里面&#xff0c;参见&#xff1a;https://blog.csdn.net/HSJ0170/article/details/128631155 姊妹篇&#xff08;宿主机nginx&#xff0c;非docker-nginx&#xff09;&am…

Vue计算属性computed深度解析,告别只会使用,迎来全面理解

一、基础示例 模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。比如说&#xff0c;有这样一个包含嵌套数组的对象&#xff1a; const author reactive({name: John Doe,books: [Vue 2…

基于java+SpringBoot+Vue的数码论坛系统设计与实现

基于javaSpringBootVue的数码论坛系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 数码论坛系统是一个基于互联网的数码产品讨论和信息分享平台…

深度学习语义分割篇——DeepLabV2原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

小狐狸JSON-RPC:wallet_watchAsset(向钱包中新增资产代币)

wallet_watchAsset 请求用户在 MetaMask 中添加新的资产。返回一个布尔值&#xff0c;是否已成功添加。 var res await window.ethereum.request({ "method": "wallet_watchAsset","params": {"type": "ERC20","opti…

盘点库存怎么做账

库存的盘点是企业中非常重要的一步&#xff0c;也是仓管经常要做的工作&#xff0c;盘点通俗点说就是点一下实物与账面上的数据是否一至&#xff0c;来判断我们平时的货物管理是否与账面上的业务往来符合&#xff0c;盘点库存怎么做账&#xff1f; 按目前的情况来看&#xff0c…

什么是软件工程?如何应用软件工程原则?

什么是软件工程&#xff1f; 软件工程是应用工程原则来设计、开发、维护、测试和评估计算机软件的过程。它涵盖了软件开发的整个生命周期&#xff0c;包括需求收集和分析、系统设计、编码、集成和测试、部署以及维护和支持。软件工程的目的是为了确保软件系统的可靠性、效率、…

【数据结构】Java中Map和Set详解(含二叉搜索树和哈希表)

目录 Map和Set详解 1.二叉搜索树 2.Map常见方法 3.Set常见方法 4.哈希表 Map和Set详解 Map&#xff1a;一种键值对结构&#xff0c;hashMap中键和值均可以为空&#xff0c;hashTable中则不可以存放null值 Set&#xff1a;一种集合&#xff0c;不能存放重复元素&#xff0c…

SpringBoot使用Jedis步骤

基础连接方式 引入依赖 <!-- Jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency>创建Jedis对象&#xff0c;建立连接 操作字符串 方法名与Rdeis命令一致 操作Hash类型 释放资源 测…

JavaScript PAT乙级题解 1048 数字加密

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A&#xff0c;对任一正整数 B&#xff0c;将其每 1 位数字与 A 的对应位置上的数字进行以下运算&#xff1a;对奇数位&#xff0c;对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12&#xff1…