当前位置: 首页 > article >正文

2.5.第十六届蓝桥杯大赛软件赛省赛Java 大学 B 组(上)

1.逃离高塔问题描述小蓝一觉醒来小蓝被困在一座高耸的塔中。这座塔共有 20252025 层每一层都刻有一个数字的立方值从底层的 1313、2323、3333、⋯⋯一直到顶层的 2025320253层层叠叠直入云霄。塔顶有一扇门门旁刻着一行字“若想离开此塔需找出这些立方数中个位数字为 33 的数的个数。”小蓝非常着急因为他需要尽快离开这座塔去参加即将到来的蓝桥杯比赛。时间紧迫请你帮助他解答这个问题。参考代码package practice4; public class Test4 { public static void main(String[] args) { //1.定义变量统计个数 int sum0; //2.循环判断符合要求的数 for (int i 1; i 2025; i) { //3.求出立方数 /*注意2025的立方非常大要用long存储*/ long result (long) Math.pow(i, 3); //4.判断个位数是否为3 if(result%103) sum; } //5.输出 System.out.println(sum); } }当然了经验丰富的小伙伴会知道立方后个位数为3的数个位只能为7根据这个不需要代码就能推出来。2.消失的蓝宝问题描述“蓝宝又不见了” 2025 年 4 月 12 日蓝桥杯吉祥物“蓝宝”在省赛前夕突然失踪。小蓝翻阅了蓝宝的活动记录发现它的出现时间似乎与蓝桥杯的两个重要日期密切相关第十六届省赛日期 2025041220250412第十五届省赛日期 2024041320240413。经过分析小蓝推测蓝宝的下一次出现时间 NN 满足以下条件N20250412N20250412 能被 2024041320240413 整除。N20240413N20240413 能被 2025041220250412 整除。现在请你帮小蓝找出满足条件的最小正整数 NN预测蓝宝的下一次出现时间。参考代码package practice6; public class Test { public static void main(String[] args) { //1.记录变量 int num1 20250412; int num2 20240413; //2.暴力枚举 for (long i 2 ;i10000000000000L;i){ //i从1开始n会有负数 //3.先根据第一个条件确定n再判断n是否符合第二个条件 long n num2*i - num1; //4.判断 if ((nnum2)%num10){ System.out.println(n); break; } } } }另一种思路设n2025041220240413a,n2024041320250412b,则20240413*(a1)20250412*(b1),又因为20240413和20250412互质所以a1最小为20250412则n20240413*a-2025041220250411 * 20240413 - 20250412。3.电池分组问题描述研究员小蓝受到实验室主任的指示需要对实验室新研发的 n 个新型能量电池进行分组实验。这 N 个能量电池的能量值分别用 A1,A2,…,AN表示每个能量值都是一个整数。为了保证实验的安全性小蓝需要将这 N 个能量电池分成两组使得这两组能量电池的能量值异或和相等。能量值的异或和计算方法如下对于一个集合 S其异或和等于集合中所有元素的按位异或结果。例如集合 {1,2,3} 的异或和为 1⊕2⊕30其中 ⊕ 表示异或运算。现在小蓝想知道这 n个能量电池能否分成两组使得这两组能量电池的能量值异或和相等。注意每组至少包含一个能量电池。请你帮帮他输入格式输入的第一行包含一个整数 T 表示测试用例的数量。每个测试用例占两行第一行包含一个整数 N表示能量电池的数量。第二行包含 n 个整数 A1,A2,…,AN​表示每个能量电池的能量值。输出格式对于每个测试用例输出一行。如果可以将能量电池分成两组使得这两组能量电池的能量值异或和相等则输出YES否则输出NO。样例输入2 3 1 2 3 4 1 2 3 4样例输出YES NO解题思路先假设条件成立能分为两个异或和相等的组那么此时两组的异或和为0。也就意味着只要所有数据的异或和为0就可以将其划分为异或和相等的两组数据.其中不是两组的异或和各自“必须为 0”而是当两组异或和相等时总异或和一定为 0所以要把集合中的所有元素都异或起来看是否为0反过来当总异或和为 0 时两组的异或和必然相等可以是任意值比如 1、3、5 等等。参考代码package practice4; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scannew Scanner(System.in); //1.输入集合个数 int num scan.nextInt(); //2.判断能否分组 /*根据题意只有集合的所有数据经过异或运算后结果为0才能分成两组 * 只要有一个为1就说明存在不符合题意的*/ while (num0){ //定义变量记录异或结果 long result0; //1.输入集合元素个数 int len scan.nextInt(); //2.循环输入集合元素的数据并进行异或运算 for (int i 0; i len; i) { int data scan.nextInt(); result result ^ data; } //3.判断 if(result0) System.out.println(YES); else System.out.println(NO); //4.开始下一个集合判断 num--; } } }4.魔法科考试问题描述小明正在参加魔法科的期末考试考生需要根据给定的口诀组合出有效的魔法。其中老师给定了 n 个上半部分口诀 a1,a2,…,ana1​,a2​,…,an​ 和 m 个下半部分口诀 b1,b2,…,bmb1​,b2​,…,bm​均用整数表示。完整的口诀包含一个上半部分口诀和一个下半部分口诀当选用两个口诀 ai和 bj将组合出完整口诀 Saibj​。当 S满足 S≤nm 且 S 为质数时魔法是有效的。魔法的种类只和 S 的大小有关。如果每个上半部分口诀和每个下半部分口诀在不同的组合中可以重复使用小明想知道一共可能组合出多少种不同的有效魔法输入格式输入共三行。第一行为两个正整数 n,m。第二行为 nn 个由空格分开的正整数 a1,a2,…,an。第三行为 mm 个由空格分开的正整数 b1,b2,…,bm​。输出格式输出共 1行一个整数表示答案。样例输入3 4 2 3 10 3 4 5 1样例输出3样例说明可以组合出 3,5,7 这三个有效魔法。注意事项本体要注意的是质数判断以及有效魔法的不重复性。参考代码不严谨的代码package practice5; import java.util.HashSet; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner scannew Scanner(System.in); //1.分别输入两个数组长度 int len1scan.nextInt(); int len2scan.nextInt(); //2.分别定义两个数组并录入数据 int[] anew int[len1]; for (int i 0; i len1; i) { a[i]scan.nextInt(); } int[] bnew int[len2]; for (int i 0; i len2; i) { b[i] scan.nextInt(); } //3.判断 HashSetInteger resultnew HashSet(); for (int i 0; i a.length; i) { for (int j 0; j b.length; j) { if( a[i]b[j]len1len2 method(a[i]b[j])){ result.add(a[i]b[j]); } } } //4.输出 System.out.println(result.size()); } //定义一个函数判断当前数是否为质数 private static boolean method(int number){ double tempMath.sqrt(number); int top (int) Math.ceil(temp); //开根号后向上取整 for (int i 2; i top; i) { if(number%i0) return false; //不是质数 } //此时就是质数 return true; } }严谨的代码以及上述代码的漏洞解读a、先分析判断质数方法的问题质数判断函数method()存在两个关键错误会导致结果不准确未处理小于 2 的数质数的定义是「大于 1 的自然数只能被 1 和自身整除」但代码没有判断number 1的情况会把1、0、负数错误判定为质数。向上取整多余且可能出错Math.ceil(Math.sqrt(number))会导致循环多执行一次比如number4sqrt(4)2ceil 后还是 2没问题但number5sqrt(5)≈2.236ceil 后是 3实际只需要循环到 2 即可正确做法是直接取整后循环或用i*i number避免浮点运算。b、代码优化方案提速 修正优化核心思路修正质数判断逻辑补全边界条件去掉多余的浮点运算减少循环次数。减少重复计算提前计算len1len2的值无需每次循环都计算。减少无效循环在两数相加时若和超过len1len2直接跳过提前剪枝。质数判断提速偶数直接排除除了 2循环步长改为 2减少一半循环次数。优化后的完整代码:package practice5; import java.util.HashSet; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner scan new Scanner(System.in); // 1. 输入数组长度 int len1 scan.nextInt(); int len2 scan.nextInt(); // 2. 录入数组数据 int[] a new int[len1]; for (int i 0; i len1; i) { a[i] scan.nextInt(); } int[] b new int[len2]; for (int i 0; i len2; i) { b[i] scan.nextInt(); } scan.close(); // 关闭Scanner释放资源 //边界防护数组为空的情况 if(len10||len20){ System.out.println(0); return; } // 3. 核心逻辑提前计算总和阈值避免重复计算 int sumThreshold len1 len2; HashSetInteger result new HashSet(); for (int numA : a) { // 增强for循环可读性更高 for (int numB : b) { int sum numA numB; // 提前剪枝和超过阈值直接跳过减少质数判断的调用 if (sum sumThreshold) { continue; } // 调用优化后的质数判断方法 if (isPrime(sum)) { result.add(sum); } } } // 4. 输出结果 System.out.println(result.size()); } /** * 优化后的质数判断方法 * 1. 处理边界小于2不是质数2是唯一偶质数 * 2. 排除偶数减少一半循环次数 * 3. 用i*i number替代sqrt避免浮点运算误差 */ private static boolean isPrime(int number) { // 边界1小于2的数不是质数 if (number 1) { return false; } // 边界22是唯一的偶质数 if (number 2) { return true; } // 边界3偶数且大于2不是质数 if (number % 2 0) { return false; } //此时该数必定为奇数那么如果不是质数那么因数必定不是偶数 // 核心循环只判断奇数从3开始步长2到sqrt(number)为止 for (int i 3; i * i number; i 2) { if (number % i 0) { return false; } } return true; } }c、关键优化点解释优化点原代码问题优化后效果质数判断边界处理未处理 number1错误判定非质数结果准确避免无效循环排除偶数 步长 2循环遍历所有数效率低循环次数减少 50%大幅提速i*i number用 sqrtceil浮点运算有误差且耗时整数运算更高效无精度问题提前计算 sumThreshold每次循环都计算 len1len2重复运算只计算 1 次减少冗余计算提前剪枝 sum 阈值无效调用质数判断方法减少不必要的质数判断节省时间增强 for 循环普通 for 循环可读性差代码更简洁无性能损耗关闭 Scanner未关闭资源可能导致内存泄漏资源释放更规范尤其大数据量时更稳定d、额外提速建议针对大数据量如果输入的数组长度很大比如 len1、len2 都是 10^4 级别可以再做以下优化预缓存质数提前计算0~(len1len2)范围内的所有质数用埃氏筛 / 欧拉筛后续直接查表避免重复判断质数。示例埃氏筛优化// 在main方法中提前生成质数缓存 int maxNum len1 len2; boolean[] isPrimeCache new boolean[maxNum 1]; // 初始化埃氏筛 for (int i 2; i maxNum; i) { isPrimeCache[i] true; } for (int i 2; i * i maxNum; i) { if (isPrimeCache[i]) { for (int j i * i; j maxNum; j i) { isPrimeCache[j] false; } } } // 后续判断时直接用if (isPrimeCache[sum])替换 HashSet如果不需要去重题目中 sum 可能重复HashSet 是必要的但可以用布尔数组替代 HashSet查询更快。e.总结质数判断核心修正必须处理number1和偶数用i*i number替代浮点运算结果才准确且高效。性能优化关键提前剪枝sum 超过阈值直接跳过、排除偶数循环、减少重复计算能让代码运行速率提升 50% 以上。大数据量进阶埃氏筛预缓存质数是最优方案避免多次重复判断同一个数是否为质数。d.关于判断是否为质数的方法中for循环中不判断偶数的原因不是 “不判断偶数”而是 “提前判断偶数并直接排除”这是质数判断里最经典的提速技巧我把这个逻辑拆透质数的定义是大于 1 的自然数只能被 1 和自身整除除了数字 2 之外所有偶数都不可能是质数-原因很简单偶数的定义是 “能被 2 整除的数”除了 2 之外所有偶数都至少有 3 个因数1、2、自身违反质数的定义2是唯一的偶质数提前判断偶数” 的核心答案减少无效循环无精度风险

相关文章:

2.5.第十六届蓝桥杯大赛软件赛省赛Java 大学 B 组(上)

1.逃离高塔问题描述:小蓝一觉醒来,小蓝被困在一座高耸的塔中。这座塔共有 20252025 层,每一层都刻有一个数字的立方值,从底层的 1313、2323、3333、⋯⋯,一直到顶层的 2025320253,层层叠叠,直入…...

RAG与GraphRAG:提升大模型准确性的关键技术,小白也能学会收藏!

本文介绍了RAG和GraphRAG技术,旨在增强大语言模型的准确性和可靠性。RAG通过检索外部知识库来支持生成回答,而GraphRAG则引入知识图谱进行深度信息挖掘。文章详细阐述了两种技术的架构、挑战和对比,并结合实际案例展示了在元数据检索场景中的…...

CEO必会之财务基础

CEO必会之财务基础 CEO必会之财务基础:三张表背后的公司真相 课程导语 话术升级: 各位好,今天我们来聊一个很多CEO最头疼、但也最不能回避的课题:财务基础。 很多技术出身、产品出身的CEO,一看到数字就头大&#x…...

告别繁琐设置!用这个一键切换脚本,Win10微软拼音全拼/双拼自由切换

微软拼音输入法高效切换方案:全拼与双拼的自动化实践 在Windows 10系统中,微软拼音输入法作为默认中文输入工具,其全拼和双拼模式各有优势。全拼适合大多数用户,输入准确但按键次数较多;双拼则通过将声母和韵母映射到单…...

SiamMask核心原理深度解析:孪生网络如何统一跟踪与分割

SiamMask核心原理深度解析:孪生网络如何统一跟踪与分割 【免费下载链接】SiamMask [CVPR2019] Fast Online Object Tracking and Segmentation: A Unifying Approach 项目地址: https://gitcode.com/gh_mirrors/si/SiamMask SiamMask是一个创新的视觉目标跟踪…...

为什么开发者都在使用Nord tmux?探索其设计哲学

为什么开发者都在使用Nord tmux?探索其设计哲学 【免费下载链接】tmux 项目地址: https://gitcode.com/gh_mirrors/tmux10/tmux Nord tmux是一款基于北极蓝调色彩的优雅tmux主题,专为流畅清晰的工作流程设计。作为GitHub加速计划的一部分&#x…...

【轨物方案】数字化转型的“破局者”:智能开关柜如何实现70%的运维效率跨越

在新型电力系统建设背景下,传统电力运维模式正面临严峻的技术瓶颈。长期以来,行业普遍处于“被动检修”状态:开关柜内部如同一个“状态黑箱”,由于缺乏实时数据支撑,运维人员无法预知触头升温或机械磨损,往…...

3大核心功能让MachOView成为macOS二进制分析的高效深度工具

3大核心功能让MachOView成为macOS二进制分析的高效深度工具 【免费下载链接】MachOView MachOView fork 项目地址: https://gitcode.com/gh_mirrors/ma/MachOView 在macOS和iOS开发过程中,开发者常常面临诸多棘手问题。如何快速定位二进制文件异常&#xff1…...

技术前沿|AIGC溯源技术全景与应用实践

1. AIGC溯源技术全景:从模型到数据的追踪体系 想象一下,你在画廊看到一幅惊艳的画作,却无法判断它出自人类画家还是AI之手——这正是AIGC溯源技术要解决的核心问题。AIGC(AI生成内容)溯源技术就像数字世界的"指纹…...

高德地图API调用避坑:Java后台如何正确配置key和请求头

高德地图API调用实战:Java开发者避坑指南 第一次接触高德地图API的Java开发者,往往会在配置环节踩不少坑。那些看似简单的key和请求头设置,实际上藏着不少细节问题。最近接手一个项目时,我也遇到了那个令人头疼的{"status&qu…...

cv_unet_image-colorization实战教程:从环境搭建到批量处理黑白照片

cv_unet_image-colorization实战教程:从环境搭建到批量处理黑白照片 1. 引言 你有没有翻看过家里的老相册?那些黑白照片记录着珍贵的回忆,但总让人觉得少了点什么。色彩能让记忆更加鲜活,让历史重现光彩。今天,我要带…...

【含文档+PPT+源码】基于SpringBoot的医院药房管理系统

项目介绍本课程演示的是一款 基于SpringBoot的医院药房管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项目附带的…...

墨语灵犀赋能操作系统教学:模拟命令行助手与概念讲解

墨语灵犀赋能操作系统教学:模拟命令行助手与概念讲解 操作系统这门课,很多同学都觉得有点“硬核”。那些抽象的概念,比如进程调度、内存分页,还有一堆看起来冷冰冰的命令行指令,常常让人望而却步。有没有一种方法&…...

【JUC并发 | 第九篇】Semaphore 和 CountDownLatch

目录 Semaphore Semaphore 原理 CountDownLatch CountDownLatch 作用 CountDownLatch 原理 【JUC并发 | 第八篇】AQS的底层原理https://blog.csdn.net/h52412224/article/details/159159242?spm1001.2014.3001.5502 【JUC并发 | 第七篇】简析Future 和 CompletableFutur…...

Immutables 性能优化技巧:预哈希、单例模式和内部机制

Immutables 性能优化技巧:预哈希、单例模式和内部机制 【免费下载链接】immutables Annotation processor to create immutable objects and builders. Feels like Guavas immutable collections but for regular value objects. JSON, Jackson, Gson, JAX-RS integ…...

递归魔法:从排列组合到算法优化

1. 递归与排列组合的奇妙邂逅 第一次接触递归解决全排列问题时,我盯着屏幕上的代码看了整整半小时。那感觉就像在玩俄罗斯套娃——每次打开一个函数,里面又调用了自己。后来在实际项目中反复使用才发现,递归处理排列组合简直是量身定制的解决…...

基于大模型的政务问答系统:建设、运维与成效

在数字政府建设迈入“智能化深耕”的今天,传统政务问答模式的痛点日益凸显——人工坐席压力大、咨询高峰响应滞后、政策解读不精准、跨部门咨询衔接不畅,群众和企业办事“问不清、等得久、跑多次”的问题难以彻底解决。而大模型技术的崛起,凭…...

基于径向基RBF神经网络的故障分类与故障诊断matlab程序代码详解及示例

径向基RBF神经网络的故障分类与故障诊断matlab 程序代码RBF神经网络故障分类与诊断系统:设计思路、功能全景与最佳实践——一份面向工程团队的“黑盒”技术指南------------------------------------------------ 引言 旋转机械、电力电子、流程工业等场景对“零停机…...

Kylin V10本地源搭建全攻略:从reposync到Apache配置一步到位

Kylin V10本地源搭建全攻略:从reposync到Apache配置一步到位 在离线环境中维护服务器系统时,最头疼的莫过于软件包的依赖管理。上周我接手了一个军工企业的内网服务器集群,所有设备都运行Kylin V10系统,但无法连接外网更新软件。经…...

3步打造无广告音乐体验:xManager高效管理指南

3步打造无广告音乐体验:xManager高效管理指南 【免费下载链接】xManager Ad-Free, New Features & Freedom 项目地址: https://gitcode.com/GitHub_Trending/xm/xManager 还在为音乐应用广告弹窗烦恼?通勤路上想听首歌却被30秒广告打断&#…...

ArchUnit架构层测试终极指南:分层架构与洋葱架构验证

ArchUnit架构层测试终极指南:分层架构与洋葱架构验证 【免费下载链接】ArchUnit A Java architecture test library, to specify and assert architecture rules in plain Java 项目地址: https://gitcode.com/gh_mirrors/ar/ArchUnit ArchUnit是一个强大的J…...

EasyFloat实战案例:从零构建完整的悬浮窗应用

EasyFloat实战案例:从零构建完整的悬浮窗应用 【免费下载链接】EasyFloat 🔥 EasyFloat:浮窗从未如此简单(Android可拖拽悬浮窗口,支持页面过滤、自定义动画,可设置单页面浮窗、前台浮窗、全局浮窗&#xf…...

Ruoyi+WebSocket实战:如何绕过安全配置实现即时通讯功能

Ruoyi框架中WebSocket安全配置的深度实践指南 引言:当实时通讯遇上安全框架 在基于Ruoyi框架开发企业级应用时,实时通讯功能的需求日益普遍。想象这样一个场景:你的团队协作平台需要即时消息通知,客服系统要求实时对话能力&#x…...

3D打印文件转换不再头疼:Blender 3MF插件让你的创意完美输出 [特殊字符]

3D打印文件转换不再头疼:Blender 3MF插件让你的创意完美输出 🚀 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 还在为3D打印文件格式转换而烦恼吗…...

【数据分析】基于机器学习增强策略对燃烧不稳定预测进行不确定性量化附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

MiUnlockTool完全解析:小米设备Bootloader解锁终极指南

MiUnlockTool完全解析:小米设备Bootloader解锁终极指南 【免费下载链接】MiUnlockTool MiUnlockTool developed to retrieve encryptData(token) for Xiaomi devices for unlocking bootloader, It is compatible with all platforms. 项目地址: https://gitcode.…...

gabs核心功能深度解析:数组操作、路径查询与数据修改

gabs核心功能深度解析:数组操作、路径查询与数据修改 【免费下载链接】gabs For parsing, creating and editing unknown or dynamic JSON in Go 项目地址: https://gitcode.com/gh_mirrors/ga/gabs gabs是一款专为Go语言设计的JSON处理库,能够帮…...

VR消防安全学习机|沉浸式体验守护生命安全的新方式

在现代社会,消防安全教育已经成为全民必修课。从校园到社区,从企业到公共场所,火灾防范和应急自救的知识普及显得尤为重要。传统的宣讲、板报、视频虽然能传递知识,但缺乏真实感和参与度。而随着虚拟现实技术(VR&#…...

永磁同步电机的无感控制里有个头疼的问题:转速抖得跟筛糠似的。传统滑模观测器用反正切算角度,差分得转速,这招在实验室还行,真上工程现场就容易翻车

基于PLL的SMO滑模观测器算法,永磁同步电机无传感器矢量控制,跟基于反正切的SMO做对比,可以有效消除转速的抖动。咱先看老方法怎么玩的。滑模观测器吐出反电动势ealpha和ebeta后,代码通常是这样的: // 传统反正切法 flo…...

Reflex安全指南:防止无限循环与权限管理的最佳实践

Reflex安全指南:防止无限循环与权限管理的最佳实践 【免费下载链接】reflex Run a command when files change 项目地址: https://gitcode.com/gh_mirrors/ref/reflex Reflex是一款强大的文件监控工具,能够在文件变化时自动运行指定命令&#xff…...