2025年第十六屆藍橋杯省賽JavaB組真題回顧

?第16屆藍橋杯省賽已經結束了,第一次參加也是坐牢了4個小時,現在還是來總結一下吧(先聲明以下的解法,大家可以當作一種思路來看,解法不一定是正解,只是給大家提供一種能夠正常想到的思路吧)

試題A:逃離高塔

本題其實沒有什么難度,就是一個循環遍歷即可,那么唯一需要注意的就是循環遍歷的過程中,int是會爆的,這里需要用long來進行存儲

public class Main{public static void main(String[] args){int ans=0;//記錄最終答案for(long i=1;i<=2025;i++){long x=i*i*i;if(n%10==3){ans++;}}System.out.println(ans);}
}?

?最后進行的答案就是:202

?試題B:消失的藍寶

這題其實也是循環遍歷即可,但是我們不能一個數一個數的去試,如果一個一個去遍歷的話,好像是要跑2小時是可以跑出來,那么通過題目我們可以發現:

  1. N+20250412要能夠被20240413整除
  2. N+20240413要能夠被20250412整除

上述表達式我們可以理解為,這個數一定是20240413的倍數,并且可以發現20250412比20240413是要大9999,那么我們可以設一個數 n1 初始為20240413,然后循環從20240413開始遍歷,n1 每次都加上一個20240413(因為最后的結果一定是20240413的倍數,所以其他數就沒有必要一個一個去遍歷了),然后再循環中我們定義 n2=n1-9999,然后判斷如果當前的 n2%20250412==0?(我們每次加的都是20240413,這個數肯定是20240413的倍數,則無需再判斷n1%20240413==0?),如果等于0那么再減去一個20250412就是最終答案!(因為我們是第一個表達式為基準的,所以要減去一個20250412)

public class Main{public static void main(String[] args){for(long n1=20240413L;n1<Long.MAX_VALUE;n1+=20240413){long n2=n1-9999;//判斷if(n2%20250412==0){System.out.println(n1-20250412);break;}}}
}

最終答案就是:409876661809331?

?試題C:電池分組

這題就是一個位運算判斷:要求將若干個數分為2組數字,那么這兩組數字的異或和結果一樣的話,一定是等于0的,這是為啥呢?舉個例子:

例如樣例的 1 2 3,1和2進行異或和后是3,那么3^3不就是0嗎?所以我們只需要遍歷一遍數組看看最后的異或結果是不是0即可(偷偷抱怨:這題這是太可惜了,考前1周都在學動態規劃,考場看到這題還以為是01背包的選與不選的變種問題,最后還沒寫出來!!!)

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan=new Scanner(System.in);int t=scan.nextInt();while(t-->0){int n=scan.nextInt();int ans=0;for(int i=0;i<n;i++){ans^=scan.nextInt();}if(ans==0){System.out.println("YES");}else{System.out.println("NO");}}}
}

?試題D:魔法科考試

這題的考點就是判斷素數的問題,其實就是兩個循環遍歷兩個數組然后判斷條件是否成立(需要的注意的是,這里會重復計算條件成立的同一個數,那么應該Set來過濾重復的數),再一個就是性能的問題,這里的數據是20000,如果使用樸素方法判斷一個數是不是素數,那么最壞情況的時間復雜度就是n*m*log(a[i]+b[j]),這個時間復雜度是決定會超時的,在洛谷上這個時間復雜度是只能過8個案例的,所以我們應該提前篩好素數,然后在O(1)的時間復雜度判斷是不是素數!(考場上我也沒注意,使用的就是樸素的判斷素數,這題也是拿不滿的,可惜!!!)

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;public class Main{static int[]prime=new int[20005];static boolean st[]=new boolean[20005];static int cnt=0;static Set<Integer> set=new HashSet<>();static int num;public static void main(String[] args){Scanner scan=new Scanner(System.in);int n=scan.nextInt();int m=scan.nextInt();int []a=new int[n];int []b=new int[m];for(int i=0;i<n;i++){a[i]=scan.nextInt();}for(int i=0;i<m;i++){b[i]=scan.nextInt();}num=n+m;//篩素數creat();//遍歷枚舉int ans=0;//記錄最終答案for(int i=0;i<n;i++){for(int j=0;j<m;j++){int s=a[i]+b[j];if(s<=num){//判斷是不是素數if(set.contains(s)){ans++;set.remove(s);}}}}System.out.println(ans);}public static void creat(){//這是只需要篩選出num以內的素數即可,因為超過num的素數我們根本判斷不到for(int i=2;i<=num;i++){if(!st[i]){prime[cnt++]=i;set.add(i);}for(int j=0;j<cnt;j++){if(i*prime[j]>num)break;st[i*prime[j]]=true;if(i%prime[j]==0)break;}}}
}

試題E:爆破

本題的核心就是在于,如何知道兩個圓的最短距離:兩個圓心之間的距離減去兩個圓各自的半徑,如果<=0那么就是相交的,如果不是那么就不是相交的

?畫圖分析:(畫圖畫的不好請見諒)

import java.util.Scanner;public class Main{static int g[][];public static void main(String[] args) {Scanner scan=new Scanner(System.in);int n=scan.nextInt();g=new int[n+1][3];for(int i=1;i<=n;i++){g[i][0]=scan.nextInt();g[i][1]=scan.nextInt();g[i][2]=scan.nextInt();}//創建n*n的表格double dp[][]=new double[n+1][n+1];//dp[i][j]表示第i個圓和第j個圓之間的距離double ans=0;//存放最后答案for(int i=1;i<=n;i++){double min=Double.MAX_EXPONENT;//尋找當前圓和其他圓的最小距離for(int j=1;j<=n;j++){//判斷第i個圓和第j個圓的距離//先判斷是不是自身if(i==j){dp[i][j]=Double.MAX_EXPONENT;//因為我們最后要求一個最小的值,所以這里賦最大值}else{dp[i][j]=func(i,j);}min=Math.min(min,dp[i][j]);}ans+=min;}System.out.printf("%.2f",ans);}//判斷距離public static double func(int i,int j) {//如果橫坐標相同,直接判斷縱坐標距離if(g[i][0]==g[j][0]){int len=Math.abs(g[i][1]-g[j][1]);//得到兩個圓心的距離,再減去兩個半徑len=len-(g[i][2]+g[j][2]);//判斷是不是小于0.小于0就是相交的,距離就是0return len<=0?0:len;}//如果縱坐標相同,直接判斷橫坐標的距離if(g[i][1]==g[j][1]){int len=Math.abs(g[i][0]-g[j][0]);//得到兩個圓心的距離,再減去兩個半徑len=len-(g[i][2]+g[j][2]);//判斷是不是小于0.小于0就是相交的,距離就是0return len<=0?0:len;}//此時是橫縱坐標都不在一條線上,需要利用橫縱坐標來結合勾股定理來得到兩個圓心的距離//我們以直角為基準,求兩個臨邊的長度,然后通過勾股定理來求出對邊(斜邊)的長度int lenx=Math.abs(g[i][0]-g[j][0]);int leny=Math.abs(g[i][1]-g[j][1]);//勾股double len=Math.sqrt(lenx*lenx+leny*leny);//此時得到兩個圓心的位置,然后再減去兩個圓的半徑len=len-(g[i][2]+g[j][2]);return len<=0?0:len;}
}

試題F:數組翻轉

本題呢本質上來說就是找兩個最大的連續區間,暴力+優化

根據樣例分析:

4 4 3 3 2 1 3 以樣例為例就是最后變成4 4 3 3 3 1 2

那我們可以拓展一下 4 4 3 3 2 1 3 3 4 4 4

那就是4 4 4 4 4 3 3 1 2 3 3

我們會發現翻轉的最佳效果是把連續并且相同的數最大的和第二大的合并在一起

?以下代碼是暴力解法可能是會超時的(如果后續有更好的想法再做更新吧)

import java.util.Scanner;public class Main{static boolean st[];//判斷當前數是不是查找過public static void main(String[] args) {Scanner scan=new Scanner(System.in);int n=scan.nextInt();int[]a=new int[n];int max=0;for(int i=0;i<n;i++){a[i]=scan.nextInt();max=Math.max(a[i],max);}st=new boolean[max+1];long ans=0;//記錄最終答案for(int i=0;i<n;i++){if(st[a[i]])continue;//此時說明當前數判斷過了int max1=0;//記錄第一長的區間長度int max2=0;//記錄第二長的區間長度int cnt=0;for(int j=i;j<n;j++){if(a[j]==a[i]){cnt++;}else{//如果不是,那么我們記錄一下之前的長度if(cnt>max1){max2=max1;max1=cnt;}else if(cnt>max2){max2=cnt;}cnt=0;}}if(cnt!=0){if(cnt>max1){max2=max1;max1=cnt;}else if(cnt>max2){max2=cnt;}}st[a[i]]=true;//此時統計兩個最長區間ans=Math.max(ans,1l*a[i]*(max1+max2));}System.out.println(ans);}
}

試題G:2的冪

?本題暫時沒有什么好的思路就先:略(如果有佬有想法可以評論在評論區)

...

?

試題H:研發資源分配

?

這題讀完題目感覺就是一個全排列求最大價值問題,但是直接dfs肯定是會超時的(只能過20%的案例),所以可以試試貪心策略,為了使 A 部門獲得的資源盡可能多,B 部門獲得的資源盡可能少,每天都讓 A 部門提交比 B 部門當天提交等級剛好大 1 的等級(如果存在),如果沒有更大的等級,就選擇最小的等級,避免資源作廢。如果都選擇不了,那么就只能判斷相等的數能不能相互抵消了

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] b = new int[n];for (int i = 0; i < n; i++) {b[i] = scanner.nextInt();}boolean[] used = new boolean[n + 1];int sumA = 0;int sumB = 0;for(int i=0;i<n;i++){//找出當前只比b[i]大一個的數int index=-1;//默認沒找到int max=Integer.MAX_VALUE;for(int j=1;j<=n;j++){if(j>b[i] && !used[j]){//此時是找到了index=j;used[j]=true;sumA+=i+1;break;}}//判斷有沒有找到if(index==-1){//此時說明沒有找到,那么我們找最小的數for(int j=1;j<=n;j++){if(j<b[i] && !used[j]){//此時是找到了index=j;used[j]=true;sumB+=i+1;break;}}}//此時判斷等于的情況if(!used[b[i]] && index==-1){//此時可以找到相同的sumA+=0;sumB+=0;used[b[i]]=true;}}System.out.println(sumA-sumB);}
}

總結

本次藍橋杯相對前幾屆來說算法考的其實不多,主要還是邏輯思維問題,?我在考場上也只是做了一個填空和一個大題,大一第一次參加還是經驗不夠,總想著這題暴力肯定超時不愿意去寫,一直坐在那里思考正解,但是這是非常不對的,我們應該先從暴力解開始優化才對,好歹寫了還有一點分,再加上第一次參加肯定還是會緊張的,只能說明年繼續努力吧!!!等到后面藍橋云課加入了今年的題目,大家可以試試上述代碼能通過幾個案例哈(如果上述題解大佬們有更好的想法歡迎在評論區留言!!!)

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79144.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79144.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79144.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入剖析 Axios 的 POST 請求:何時使用 qs 處理數據

在前端開發中&#xff0c;Axios 是一個廣泛使用的用于發送 HTTP 請求的庫&#xff0c;特別是在處理 POST 請求時&#xff0c;數據的處理方式會直接影響到請求能否正確被后端接收和處理。其中&#xff0c;使用 qs 庫對數據進行處理是一個常見的操作點&#xff0c;本文將深入探討…

通過websocket給服務端發送訂單催單提醒消息

controller層 GetMapping("/reminder/{id}")public Result Remainder(PathVariable("id") Long id){orderService.remainder(id);return Result.success();} 實現類 Overridepublic void remainder(Long id) {Orders ordersDB orderMapper.getById(id);…

ros_note02

note02 節點 ROS2中每一個節點只負責一個單獨的模塊化功能 如&#xff1a;一個節點負責控制車輪轉動&#xff0c;一個節點負責從激光雷達獲取數據&#xff0c;一個節點負責定位 通信方式&#xff1a; 話題&#xff1a;topic服務&#xff1a;services動作&#xff1a;Actio…

使用治療前MR圖像預測腦膜瘤Ki-67的多模態深度學習模型

大家好&#xff0c;我是帶我去滑雪&#xff01; 腦膜瘤是一種常見的腦部腫瘤&#xff0c;Ki-67作為腫瘤細胞增殖的標志物&#xff0c;對于評估腫瘤的生物學行為、預后以及治療方案的制定具有至關重要的作用。然而&#xff0c;傳統的Ki-67檢測依賴于組織學切片和免疫組化染色等方…

【大模型系列篇】深度研究智能體技術演進:從DeepResearch到DeepResearcher,如何重構AI研究范式

DeepResearch 的概念與功能最早由 Google 在 Gemini 系列產品中推出&#xff0c;用于自動化生成結構化研究報告&#xff0c;近期底層依賴模型Gemini升級到了2.5 Pro。而我們常規認知的DeepResearch是由OpenAI推出的一款由優化版的 o3 模型驅動專注于深度研究和分析的AI智能體產…

PostgreSQL 如何查看端口號

PostgreSQL 如何查看端口號 PostgreSQL大多數情況下&#xff0c;默認端口是5432&#xff0c;但某些環境中可能配置為其它端口。 一 基本查詢方法 1.1 psql 命令行工具查詢 -- 方法1&#xff1a;查看當前連接信息&#xff08;包含端口&#xff09; \conninfo-- 方法2&#x…

淘寶大數據接口解析:商品類目 / 價格 / 銷量多維數據采集與存儲方案

一、引言 在電商領域&#xff0c;淘寶擁有海量的商品數據&#xff0c;這些數據對于商家的市場分析、營銷策略制定以及消費者的購物決策都具有重要價值。本文將詳細介紹如何通過淘寶大數據接口采集商品的類目、價格、銷量等多維數據&#xff0c;并提供數據存儲的方案&#xff0…

分庫分表,分庫策略是什么?

在Java面試中,分庫分表是解決數據庫性能瓶頸和擴展性問題的常見方案。分庫策略主要關注如何將數據水平拆分到多個數據庫實例中,以下是詳細的分庫策略解析: 一、分庫策略的核心目標 負載均衡:分散數據存儲和查詢壓力,避免單庫成為性能瓶頸。擴展性:支持業務增長,通過增加…

STM32 HAL庫SPI讀寫W25Q128(軟件模擬+硬件spi)

1. 引言 在嵌入式系統開發中&#xff0c;SPI&#xff08;Serial Peripheral Interface&#xff09;總線是一種常用的串行通信協議&#xff0c;用于在微控制器和外部設備之間進行高速數據傳輸。W25Q128 是一款常見的 SPI Flash 芯片&#xff0c;具有 128Mbit&#xff08;16MB&a…

系統的安全及應用

倉庫做了哪些優化 倉庫源換成國內源不使用root用戶登錄將不必要的開機啟動項關閉內核的調優 系統做了哪些安全加固 禁止使用root禁止使用弱命令將常見的 遠程連接端口換掉 系統安全及應用 Cpu負載高 java程序 運行異常中病毒&#xff1f; ps aux - - sort %cpu %mem Cpu …

Java Lambda 表達式詳解:發展史、語法、使用場景及代碼示例

Java Lambda 表達式詳解&#xff1a;發展史、語法、使用場景及代碼示例 1. Lambda 表達式的發展史 背景與動機 JDK 7 前&#xff1a;Java的匿名內部類雖強大&#xff0c;但代碼冗余&#xff08;如事件監聽器、集合遍歷&#xff09;。JDK 8&#xff08;2014&#xff09;&#…

Linux 命令全解析:從零開始掌握 Linux 命令行

Linux 作為一款強大的開源操作系統&#xff0c;廣泛應用于服務器、嵌入式系統以及超級計算機領域。掌握 Linux 命令行技能&#xff0c;是每一位開發者和系統管理員的必備能力。本文將從基礎開始&#xff0c;為你詳細介紹常用的 Linux 命令&#xff0c;以及它們的使用場景和示例…

【已更新完畢】2025泰迪杯數據挖掘競賽C題數學建模思路代碼文章教學:競賽智能客服機器人構建

完整內容請看文末最后的推廣群 基于大模型的競賽智能客服機器人構建 摘要 隨著國內學科和技能競賽的增多&#xff0c;參賽者對競賽相關信息的需求不斷上升&#xff0c;但傳統人工客服存在效率低、成本高、服務不穩定和用戶體驗差的問題。因此&#xff0c;設計一款智能客服機器…

關于汽車輔助駕駛不同等級、技術對比、傳感器差異及未來發展方向的詳細分析

以下是關于汽車輔助駕駛不同等級、技術對比、傳感器差異及未來發展方向的詳細分析&#xff1a; 一、汽車輔助駕駛等級詳解 根據SAE&#xff08;國際自動機工程師學會&#xff09;的標準&#xff0c;自動駕駛分為 L0到L5 六個等級&#xff1a; 1. L0&#xff08;無自動化&…

神經網絡如何表示數據

神經網絡是如何工作的&#xff1f;這是一個讓新手和專家都感到困惑的問題。麻省理工學院計算機科學和人工智能實驗室&#xff08;CSAIL&#xff09;的一個團隊表示&#xff0c;理解這些表示&#xff0c;以及它們如何為神經網絡從數據中學習的方式提供信息&#xff0c;對于提高深…

網絡復習二(TCP【3】)

一、為什么TIME_WAIT等待的時間是2MSL&#xff1f; MSL&#xff1a;報文最大生存時間 我們要知道TCP報文是基于IP協議生存的&#xff0c;而在IP頭中有一個TTL&#xff08;經過路由跳數&#xff09;&#xff0c;當TTL為0使&#xff0c;數據報被丟失&#xff0c;同時發送ICMP報…

Go:基本數據

文章目錄 整數浮點數復數布爾值字符串字符串字面量UnicodeUTF - 8字符串和字節 slice字符串和數字的相互轉換 常量常量生成器 iota無類型常量 整數 分類 Go 的整數類型按大小分有 8 位、16 位、32 位、64 位 &#xff0c;同時有符號整數包括int8、int16、int32、int64 &#…

0x03.Redis 通常應用于哪些場景?

回答重點 1)緩存(Cache): Redis 最常用的場景是作為緩存層,以減少數據庫的負載,提高數據讀取速度。例如,常用的用戶會話數據和頁面渲染結果可以存儲在 Redis 中。2)分布式鎖(Distributed Lock): Redis 可以用作分布式鎖的實現,確保在分布式系統中資源的安全訪問,避免…

大數據學習筆記

文章目錄 1. 大數據概述1.1 大數據的特性1.2 大數據技術生態1.2.1 Hadoop 的概念特性1.2.2 Hadoop生態圈 — 核心組件與技術棧1.2.3 Hadoop生態演進趨勢 2. 數據處理流程與技術棧2.1 數據采集2.1.1 日志采集工具2.1.2 實時數據流2.1.3 數據遷移 2.2 數據預處理2.2.1 批處理2.2.…

Spring Boot 自定義商標(Logo)的完整示例及配置說明( banner.txt 文件和配置文件屬性信息)

Spring Boot 自定義商標&#xff08;Logo&#xff09;的完整示例及配置說明 1. Spring Boot 商標&#xff08;Banner&#xff09;功能概述 Spring Boot 在啟動時會顯示一個 ASCII 藝術的商標 LOGO&#xff08;默認為 Spring 的標志&#xff09;。開發者可通過以下方式自定義&a…