2023年第十四屆藍橋杯省賽B組Java題解【 簡潔易懂】

2023年第十四屆藍橋杯省賽B組Java 題解

比賽整體情況說明

第十四屆藍橋杯大賽省賽B組Java賽道共有10道題目,題型分布如下:

題目類型題量難度分布考察重點
結果填空題53簡單 + 2中等基礎算法、數學邏輯、字符串處理
編程大題52中等 + 3困難動態規劃、圖論、貪心、模擬

特點分析

  1. 題目整體難度較去年提升約15%,編程大題更注重算法優化能力
  2. 新增對Java新特性(如Stream API)的隱性考察
  3. 數學類題目占比增加,需加強數論知識儲備

題目1:卡片游戲(結果填空)

題目描述:給定N張卡片,每張寫有數字1-9,求能組成的最大回文數

解題思路

  1. 統計每個數字的出現次數
  2. 回文數對稱構建,優先使用高頻數字
  3. 特殊處理奇數次數字(最多保留1個)
import java.util.*;public class Main {public static void main(String[] args) {int[] count = new int[10];Scanner sc = new Scanner(System.in);int N = sc.nextInt();// 統計數字出現次數for(int i=0; i<N; i++) {int num = sc.nextInt();count[num]++;}StringBuilder sb = new StringBuilder();boolean hasOdd = false;// 構建回文數for(int i=9; i>=0; i--){while(count[i] > 1){sb.append(i);count[i] -= 2;}if(count[i] == 1 && !hasOdd){sb.append(i);hasOdd = true;}}// 處理全0特殊情況if(sb.length() == 0) System.out.println(0);else System.out.println(sb.toString());}
}

題目2:直線交點(編程大題)

題目描述:給定N條直線方程,求所有交點中縱坐標最小的點

解題思路

  1. 解析直線方程為標準形式
  2. 計算兩兩直線交點
  3. 維護最小縱坐標的交點
import java.util.*;class Line {double a, b, c; // ax + by + c = 0public Line(double a, double b, double c) {this.a = a; this.b = b; this.c = c;}
}public class Main {static final double EPS = 1e-8;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();List<Line> lines = new ArrayList<>();// 輸入處理for(int i=0; i<N; i++){double x1 = sc.nextDouble();double y1 = sc.nextDouble();double x2 = sc.nextDouble();double y2 = sc.nextDouble();// 轉換為標準形式double a = y2 - y1;double b = x1 - x2;double c = x2*y1 - x1*y2;lines.add(new Line(a, b, c));}double minY = Double.MAX_VALUE;double[] ans = new double[2];// 計算所有交點for(int i=0; i<N; i++){for(int j=i+1; j<N; j++){double[] res = intersect(lines.get(i), lines.get(j));if(res != null && res[1] < minY - EPS){minY = res[1];ans = res.clone();}}}System.out.printf("%.2f %.2f", ans[0], ans[1]);}// 計算兩直線交點static double[] intersect(Line l1, Line l2) {double denom = l1.a*l2.b - l2.a*l1.b;if(Math.abs(denom) < EPS) return null; // 平行double x = (l1.b*l2.c - l2.b*l1.c) / denom;double y = (l1.c*l2.a - l2.c*l1.a) / denom;return new double[]{x, y};}
}

優化點

  • 使用對象封裝直線參數
  • 添加EPS避免浮點數精度問題
  • 預處理直線方程為標準形式

題目3:日期統計(結果填空)

題目描述:統計2000年1月1日至2023年3月1日間,滿足"月份=日期"的日期數量

解題思路

  1. 遍歷指定年份范圍內的每個月
  2. 檢查當月日期是否等于月份值
  3. 注意閏年2月特殊處理
public class Main {public static void main(String[] args) {int count = 0;for(int y=2000; y<=2023; y++){for(int m=1; m<=12; m++){int maxDay = getMaxDay(y, m);if(m <= maxDay) count++;}}System.out.println(count - 1); // 減去2023-03-01當天}// 獲取每月最大天數static int getMaxDay(int y, int m){if(m == 2){if((y%4==0 && y%100!=0) || y%400==0) return 29;return 28;}return new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31}[m];}
}

優化點

  • 使用數組預存每月天數
  • 單獨處理2月閏年情況
  • 邊界條件處理(題目要求到3月1日前一天)

題目4:最優乘車路線(編程大題)

題目描述:給定地鐵線路圖,求從A站到B站的最短換乘次數路徑

解題思路

  1. 構建站點-線路的雙向映射
  2. BFS分層搜索,優先處理換乘次數少的路徑
  3. 使用三元組(站點, 當前線路, 換乘次數)作為狀態
import java.util.*;public class Main {static class Node {String station;String line;int transfer;// 構造函數及equals/hashCode省略}public static void main(String[] args) {// 輸入處理(假設已構建好線路圖)Map<String, List<String>> stationLines = new HashMap<>();Map<String, Map<String, List<String>>> lineMap = new HashMap<>();// BFS初始化Queue<Node> queue = new LinkedList<>();Set<String> visited = new HashSet<>();queue.offer(new Node(startStation, null, 0));visited.add(startStation);while(!queue.isEmpty()){Node curr = queue.poll();if(curr.station.equals(target)) {System.out.println(curr.transfer);return;}// 同一線路直達站點for(String next : lineMap.get(curr.line).get(curr.station)){if(!visited.contains(next)){visited.add(next);queue.offer(new Node(next, curr.line, curr.transfer));}}// 換乘其他線路for(String line : stationLines.get(curr.station)){if(!line.equals(curr.line)){for(String next : lineMap.get(line).get(curr.station)){if(!visited.contains(next)){visited.add(next);queue.offer(new Node(next, line, curr.transfer+1));}}}}}}
}

優化點

  • 使用分層BFS保證最短路徑
  • 狀態包含當前線路避免重復計算
  • 優先隊列可優化為雙端隊列(0-1 BFS)

題目5:矩陣覆蓋(編程大題)

題目描述:給定m×n矩陣,用1×2骨牌不重疊覆蓋,求方案數

解題思路

  1. 動態規劃狀態設計:dp[i][j]表示前i行j列的方案數
  2. 狀態轉移考慮兩種放置方式(橫向/縱向)
  3. 預處理組合數優化計算
public class Main {static final int MOD = 1000000007;public static void main(String[] args) {int m = sc.nextInt(), n = sc.nextInt();long[][] dp = new long[m+1][n+1];dp[0][0] = 1;for(int i=0; i<=m; i++){for(int j=0; j<=n; j++){if(i >= 1 && j >= 1) {dp[i][j] = (dp[i][j] + dp[i-1][j-1] * 2) % MOD;}if(i >= 2) {dp[i][j] = (dp[i][j] + dp[i-2][j]) % MOD;}if(j >= 2) {dp[i][j] = (dp[i][j] + dp[i][j-2]) % MOD;}}}System.out.println(dp[m][n]);}
}

優化點

  • 模運算防止溢出
  • 狀態壓縮可優化空間復雜度至O(n)
  • 預處理組合數加速計算

完整題目列表

題號題目名稱類型核心算法
1卡片游戲結果填空貪心算法
2直線交點編程大題解析幾何、浮點數處理
3日期統計結果填空日期計算
4最優乘車路線編程大題BFS、圖論
5矩陣覆蓋編程大題動態規劃

(注:完整題目及代碼請訪問藍橋杯官網題庫)


總結與備考建議

  1. 算法基礎:重點掌握動態規劃、貪心、圖論等核心算法
  2. 數學能力:加強數論、組合數學、概率論知識儲備
  3. 編碼規范:培養快速實現正確代碼的能力,注意邊界條件處理
  4. 模擬練習:建議按題型專項突破,每周完成2-3套真題模擬

官網鏈接

  • 藍橋杯大賽官網:https://www.lanqiao.cn/
  • 歷年真題題庫:https://www.lanqiao.cn/problems/
  • 報名入口:https://dasai.lanqiao.cn/

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

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

相關文章

深度學習中的數據增強:提升食物圖像分類模型性能的關鍵策略

深度學習中的數據增強&#xff1a;提升食物圖像分類模型性能的關鍵策略 在深度學習領域&#xff0c;數據是模型訓練的基石&#xff0c;數據的數量和質量直接影響著模型的性能表現。然而&#xff0c;在實際項目中&#xff0c;獲取大量高質量的數據往往面臨諸多困難&#xff0c;…

jakarta.mail(javax.mail)包中關于SMTP協議支持的屬性參數配置

一、程序屬性配置 NO.NameTypeDescription1mail.smtp.userStringSMTP的默認用戶名。2mail.smtp.hostString要連接的SMTP服務器。3mail.smtp.portint如果 connect()方法未明確指定一個&#xff0c;則要連接的SMTP服務器端口。默認為25。4mail.smtp.connectiontimeoutint套接字連…

《解鎖SCSS算術運算:構建靈動樣式的奧秘》

SCSS作為CSS預處理器&#xff0c;算術運算功能猶如一顆璀璨明珠&#xff0c;賦予我們動態計算樣式屬性值的強大能力&#xff0c;讓網頁樣式不再是一成不變的刻板呈現&#xff0c;而是能夠根據各種條件和需求靈動變化。 在SCSS的世界里&#xff0c;算術運算絕非孤立的存在&…

Java 入門篇

文章目錄 一、注釋1、單行注釋2、多行注釋3、文檔注釋 二、字面量注意 三、變量四、標識符 一、注釋 1、單行注釋 // 同 C992、多行注釋 /* 同 C89和 C99 等 */3、文檔注釋 /** 文檔注釋&#xff0c;其內容是可以提取到一個程序說明文檔中去的*/二、字面量 同 C 常量 注意…

PowerShell安裝Chocolatey

文章目錄 環境背景安裝參考 環境 Windows 11 專業版PowerShell 7.5.1.NET Framework 4.0Chocolatey v2.4.3 背景 Chocolatey是Windows上的包管理工具&#xff0c;有點類似于Linux的 yum 和 apt 命令。比如&#xff0c;PowerShell里默認沒有 grep 命令&#xff0c;則可以通過…

將Airtable導入NocoDB

將Airtable導入NocoDB 0. 前提條件1. 詳細步驟 NocoDB提供了一種簡化流程&#xff0c;可在幾分鐘內將您的Airtable數據庫無縫轉移到各種數據庫管理系統&#xff0c;包括MySQL、Postgres和SQLite。此功能特別適合希望將Airtable數據庫遷移到更強大且可擴展的數據庫管理系統中的用…

微軟發布了最新的開源推理模型套件“Phi-4-Reasoning

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

Elasticsearch入門速通01:核心概念與選型指南

一、Elasticsearch 是什么&#xff1f; 一句話定義&#xff1a; 開源分布式搜索引擎&#xff0c;擅長處理海量數據的實時存儲、搜索與分析&#xff0c;是ELK技術棧&#xff08;ElasticsearchKibanaBeatsLogstash&#xff09;的核心組件。 核心能力&#xff1a; 近實時搜索&…

【angular19】入門基礎教程(三):關于angular里面的響應式數據入門使用

三個框架&#xff0c;都有響應式數據的概念。在angular里面有專門的叫法&#xff0c;響應式數據叫信號,英文名signal。其他兩個框架式沒有專門的名字的&#xff0c;統稱為動態數據。這點可以說&#xff0c;angular還是太細了&#xff0c;細節值得點贊&#xff01;&#xff01; …

GitHub Actions 和 GitLab CI/CD 流水線設計

以下是關于 GitHub Actions 和 GitLab CI/CD 流水線設計 的基本知識總結: 一、核心概念對比 維度GitHub ActionsGitLab CI/CD配置方式YAML 文件(.github/workflows/*.yml).gitlab-ci.yml執行環境GitHub 托管 Runner / 自托管GitLab 共享 Runner / 自托管市場生態Actions Mar…

【網絡編程】HTTP(超文本傳輸協議)詳解

&#x1f984;個人主頁:修修修也 &#x1f38f;所屬專欄:網絡編程 ??操作環境:Visual Studio 2022 目錄 &#x1f4cc;HTTP定義 &#x1f4cc;HTTP工作原理 1.客戶端發起請求: 2.服務器處理請求: 3.客戶端處理響應: &#x1f4cc;HTTP關鍵特性 &#x1f38f;HTTP請求方法 &am…

Centos小白之在CentOS8.5中安裝Rabbitmq 3.10.8

注意事項 安裝以及運行等其他操作&#xff0c;要使用root賬號進行&#xff0c;否則會遇到很多麻煩的事情。 使用命令行進行遠程登錄 ssh root192.168.0.167 安裝make 執行安裝命令 yum -y install make gcc gcc-c kernel-devel m4 ncurses-devel openssl-devel這里有可能會…

SQL筆記——左連接、右連接、內連接

前言&#xff1a;總是忘記表連接的區別&#xff0c;在面試的時候也容易被問到&#xff0c;因此就好記性不如爛筆頭吧 集合運算 有并集、交集、差集 聯合查詢*&#xff08;針對行合并的&#xff09;* union為關鍵字&#xff0c;就是將兩個select的結果求并集&#xff08;此時重…

LeetCode - 19.刪除鏈表的倒數第N個結點

目錄 題目 解法一 雙指針算法 核心思想 執行流程 具體例子 代碼 解法二 兩次遍歷法 核心思想 執行流程 具體例子 代碼 題目 19. 刪除鏈表的倒數第 N 個結點 - 力扣&#xff08;LeetCode&#xff09; 解法一 雙指針算法 核心思想 利用雙指針間隔固定距離(n1)&a…

C# 編程核心:控制流與方法調用詳解

在編程中&#xff0c;控制流和方法調用是構建程序邏輯的兩大基石。它們決定了代碼的執行順序和模塊化協作方式。本文將從基礎概念出發&#xff0c;結合代碼示例&#xff0c;深入解析這兩部分內容。 控制流&#xff1a;程序執行的指揮棒 控制流決定了代碼的執行路徑&#xff0…

Sentinel學習

sentinel是阿里巴巴研發的一款微服務組件&#xff0c;主要為用戶提供服務保護&#xff0c;包括限流熔斷等措施 &#xff08;一&#xff09;主要功能 流量控制&#xff08;限流&#xff09;&#xff1a;比如限制1s內有多少請求能到達服務器&#xff0c;防止大量請求打崩服務器…

Linux中進程的屬性:進程優先級

一、優先級和進程優先級 1.1什么是優先級 優先級就是獲取某種資源的先后順序&#xff0c;比如打飯時排隊&#xff1a;排隊就是在確認優先級 1.2為什么要有優先級 本質上其實是目標資源相對于需求者來說比較少&#xff0c;如CPU&#xff0c;磁盤&#xff0c;顯示器&#xff…

基于LangChain 實現 Advanced RAG-后檢索優化(上)-Reranker

摘要 Advanced RAG 的后檢索優化&#xff0c;是指在檢索環節完成后、最終響應生成前&#xff0c;通過一系列策略與技術對檢索結果進行深度處理&#xff0c;旨在顯著提升生成內容的相關性與質量。在這些優化手段中&#xff0c;重排序優化&#xff08;Reranker&#xff09;作為核…

【云備份】熱點管理模塊

目錄 1.熱點管理文件的基本思路 2.熱點管理類的設計 3.熱點管理類的實現 1.熱點管理文件的基本思路 服務器端的熱點文件管理是對上傳的非熱點文件進行壓縮存儲&#xff0c;節省磁盤空間。 而熱點文件的判斷在于上傳的文件的最后一次訪問時間是否在熱點判斷時間之內。 實…

LeetCode 560. 和為 K 的子數組 | 前綴和與哈希表的巧妙應用

文章目錄 方法思路&#xff1a;前綴和 哈希表核心思想關鍵步驟 代碼實現復雜度分析示例解析總結 題目描述 給定一個整數數組 nums 和一個整數 k&#xff0c;請統計并返回該數組中和為 k 的子數組的數量。 子數組是數組中連續的非空元素序列。 示例 輸入&#xff1a;nums …