藍橋杯例題一

不管遇到多大的困難,我們都要堅持下去。每一次挫折都是我們成長的機會,每一次失敗都是我們前進的動力。路漫漫其修遠兮,吾將上下而求索。只有不斷努力奮斗,才能追逐到自己的夢想。不要害怕失敗,害怕的是不敢去嘗試。只有敢于面對挑戰,才能收獲成功的喜悅。我們要相信自己的能力,堅信自己可以做到。生活可以很艱難,但我們要有勇氣去面對,有決心去戰勝它。相信自己,努力拼搏,我們一定能夠創造屬于自己的輝煌!

藍橋杯官網https://dasai.lanqiao.cn/

刷題https://leetcode.cn/

目錄

題目1:迷宮最短路徑問題

題目2:最長公共子序列(LCS)

解答過程和代碼

題目1:迷宮最短路徑問題

解答過程:

Python代碼實現:

題目2:最長公共子序列(LCS)

解答過程:

Python代碼實現:


藍橋杯全國軟件和信息技術專業人才大賽是中國知名的編程競賽之一,B組通常面向本科二年級及以下的學生。為了提供兩個有意義且重要的題目,我會根據歷年的比賽特點以及考察的重點技能來設計。以下是兩個具有代表性的題目示例:

題目1:迷宮最短路徑問題

背景描述: 在一個由方格組成的矩形迷宮中,每個方格可能是空地(用0表示)或墻壁(用1表示)。給定一個起點和一個終點,要求找到從起點到終點的最短路徑,并輸出該路徑的長度。如果不存在這樣的路徑,則輸出-1。

輸入格式: 第一行包含兩個整數m和n (1 <= m, n <= 100),分別表示迷宮的行數和列數。 接下來m行,每行包含n個字符,組成迷宮的地圖,其中S表示起點,E表示終點,0表示空地,1表示墻壁。 保證地圖中只有一個起點和一個終點。

輸出格式: 輸出一個整數,表示從起點到終點的最短路徑長度。如果不存在這樣的路徑,則輸出-1。

樣例輸入:

5 5
S0101
01010
00000
10110
1000E

樣例輸出:

8

解題思路: 這個問題可以使用廣度優先搜索算法(BFS)來解決。BFS是一種適合用于尋找最短路徑的圖遍歷算法。具體步驟如下:

  1. 將起點加入隊列,并標記為已訪問。
  2. 每次從隊列中取出一個節點,檢查其四個方向上的鄰居節點是否是終點、空地且未被訪問過。如果是,則將這些節點加入隊列并標記為已訪問,同時記錄步數。
  3. 如果在某一步找到了終點,則返回當前步數;否則繼續遍歷直到隊列為空。
  4. 如果遍歷結束仍未找到終點,則說明沒有路徑可達,返回-1。

難度: 中等

知識點: 圖論、廣度優先搜索(BFS)、隊列操作


題目2:最長公共子序列(LCS)

背景描述: 給定兩個字符串s1和s2,求它們的最長公共子序列(Longest Common Subsequence, LCS)。子序列是指可以從原序列中刪除若干元素而不改變剩余元素順序得到的新序列。注意,這里的“公共”意味著這個子序列同時出現在兩個字符串中。

輸入格式: 第一行包含一個字符串s1。 第二行包含一個字符串s2。 字符串僅包含小寫字母,長度不超過1000。

輸出格式: 輸出一個整數,表示最長公共子序列的長度。

樣例輸入:

abcde
ace

樣例輸出:

3

解題思路: 這個問題可以通過動態規劃(Dynamic Programming, DP)來高效解決。我們定義一個二維數組dp[i][j],表示s1前i個字符與s2前j個字符之間的最長公共子序列長度。狀態轉移方程如下:

  • 如果s1[i] == s2[j],那么dp[i][j] = dp[i-1][j-1] + 1;
  • 否則,dp[i][j] = max(dp[i-1][j], dp[i][j-1])。

最終答案就是dp[len(s1)][len(s2)],其中len()函數返回字符串的長度。

難度: 中等偏難

知識點: 動態規劃(DP)、字符串處理

這兩個題目不僅涵蓋了基本的數據結構和算法知識,而且對于培養學生的邏輯思維能力和解決問題的能力也非常有幫助。

解答過程和代碼

題目1:迷宮最短路徑問題

解答過程:

廣度優先搜索(BFS)算法 是解決此類問題的最佳選擇,因為它可以保證找到從起點到終點的最短路徑。我們使用隊列來存儲待訪問的節點,并且記錄每個節點到達時的距離。

步驟:

  1. 初始化:
    • 創建一個二維數組?visited?來標記哪些位置已經被訪問。
    • 初始化隊列,將起點加入隊列,并設置其距離為0。
  2. 遍歷:
    • 從隊列中取出一個節點,檢查它是否是終點。
    • 如果不是終點,則檢查它的四個方向(上、下、左、右),對于每個方向:
      • 如果新位置在迷宮范圍內且未被訪問過,并且是空地(0?或?E),則將其加入隊列,并標記為已訪問,同時更新距離。
  3. 結束條件:
    • 如果在某一步找到了終點,則返回當前步數。
    • 如果遍歷結束仍未找到終點,則返回-1表示沒有路徑可達。
Python代碼實現:
from collections import dequedef shortest_path(maze):m, n = len(maze), len(maze[0])directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]  # 上下左右四個方向# 找到起點和終點的位置start, end = None, Nonefor i in range(m):for j in range(n):if maze[i][j] == 'S':start = (i, j)elif maze[i][j] == 'E':end = (i, j)if not start or not end:return -1# BFSqueue = deque([(start[0], start[1], 0)])  # (x, y, distance)visited = set()visited.add(start)while queue:x, y, dist = queue.popleft()if (x, y) == end:return distfor dx, dy in directions:nx, ny = x + dx, y + dyif 0 <= nx < m and 0 <= ny < n and (nx, ny) not in visited and maze[nx][ny] in ('0', 'E'):queue.append((nx, ny, dist + 1))visited.add((nx, ny))return -1# 示例輸入
maze_input = ["S0101","01010","00000","10110","1000E"
]# 將輸入轉換成列表形式
maze = [list(row) for row in maze_input]# 調用函數并打印結果
print(shortest_path(maze))  # 輸出: 8

題目2:最長公共子序列(LCS)

解答過程:

動態規劃(DP)算法 是求解最長公共子序列問題的有效方法。通過構建一個二維表 dp,其中 dp[i][j] 表示字符串 s1 的前 i 個字符與 s2 的前 j 個字符之間的最長公共子序列長度。

狀態轉移方程:

  • 如果?s1[i-1] == s2[j-1],那么?dp[i][j] = dp[i-1][j-1] + 1
  • 否則,dp[i][j] = max(dp[i-1][j], dp[i][j-1])

最終答案就是 dp[len(s1)][len(s2)]

Python代碼實現:
def longest_common_subsequence(s1, s2):m, n = len(s1), len(s2)# 創建dp表格,額外一行一列用于處理邊界情況dp = [[0] * (n + 1) for _ in range(m + 1)]# 填充dp表格for i in range(1, m + 1):for j in range(1, n + 1):if s1[i - 1] == s2[j - 1]:dp[i][j] = dp[i - 1][j - 1] + 1else:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])return dp[m][n]# 示例輸入
s1 = "abcde"
s2 = "ace"# 調用函數并打印結果
print(longest_common_subsequence(s1, s2))  # 輸出: 3

這兩個題目不僅涵蓋了基本的數據結構和算法知識,而且對于培養學生的邏輯思維能力和解決問題的能力也非常有幫助。

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

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

相關文章

【JavaEE進階】圖書管理系統 - 壹

目錄 &#x1f332;序言 &#x1f334;前端代碼的引入 &#x1f38b;約定前后端交互接口 &#x1f6a9;接口定義 &#x1f343;后端服務器代碼實現 &#x1f6a9;登錄接口 &#x1f6a9;圖書列表接口 &#x1f384;前端代碼實現 &#x1f6a9;登錄頁面 &#x1f6a9;…

【算法設計與分析】實驗8:分支限界—TSP問題

目錄 一、實驗目的 二、實驗環境 三、實驗內容 四、核心代碼 五、記錄與處理 六、思考與總結 七、完整報告和成果文件提取鏈接 一、實驗目的 掌握分支界限求解問題的思想&#xff1b;針對不同的問題&#xff0c;能夠利用分支界限法進行問題拆分和求解以及時間復雜度分析…

【3】阿里面試題整理

[1]. ES架構&#xff0c;如何進行路由以及選主 路由&#xff1a;在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;默認的路由算法是基于文檔的_id。具體來說&#xff0c;Elasticsearch會對文檔的_id進行哈希計算&#xff0c;然后對分片數量取模&#xff0c;以確定該文…

【Linux】opencv在arm64上提示找不到libjasper-dev

解決opencv在arm64上提示找不到libjasper-dev的問題。 本文首發于?慕雪的寒舍 問題說明 最近我在嘗試編譯opencv&#xff0c;安裝依賴項libjasper1和libjasper-dev的時候就遇到了這個問題。在amd64平臺上&#xff0c;我們可以通過下面的命令安裝&#xff08;ubuntu18.04&…

【數據結構】_時間復雜度相關OJ(力扣版)

目錄 1. 示例1&#xff1a;消失的數字 思路1&#xff1a;等差求和 思路2&#xff1a;異或運算 思路3&#xff1a;排序&#xff0b;二分查找 2. 示例2&#xff1a;輪轉數組 思路1&#xff1a;逐次輪轉 思路2&#xff1a;三段逆置&#xff08;經典解法&#xff09; 思路3…

基于微信小程序的電子商城購物系統設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

【linux】Linux 常見目錄特性、權限和功能

目錄特性默認權限主要功能/用途/根目錄&#xff0c;所有目錄的起點755文件系統的頂層目錄&#xff0c;包含所有其他子目錄和文件/bin基礎二進制命令目錄&#xff08;系統啟動和修復必需的命令&#xff09;755存放所有用戶可用的基本命令&#xff08;如 ls, cp, bash 等&#xf…

docker直接運行arm下的docker

運行環境是樹莓派A 處理器是 arm32v6 安裝了docker&#xff0c;運行lamp 編譯安裝php的時候發現要按天來算&#xff0c;于是用電腦vm下的Ubuntu系統運行arm的docker 然后打包到a直接導入運行就可以了 第一種方法 sudo apt install qemu-user-static 導入直接運行就可以了…

計算機網絡一點事(22)

地址解析協議ARP ARP&#xff1a;查詢Mac地址 ARP表&#xff08;ARP緩存&#xff09;&#xff1a;記錄映射關系&#xff0c;一個數據結構&#xff0c;定期更新ARP表 過程&#xff1a;請求分組&#xff0c;響應分組 動態主機配置協議DHCP 分配IP地址&#xff0c;配置默認網關…

tomcat核心組件及原理概述

目錄 1. tomcat概述 1.1 概念 1.2 官網地址 2. 基本使用 2.1下載 3. 整體架構 3.1 核心組件 3.2 從web.xml配置和模塊對應角度 3.3 如何處理請求 4. 配置JVM參數 5. 附錄 1. tomcat概述 1.1 概念 什么是tomcat Tomcat是一個開源、免費、輕量級的Web服務器。 Tomca…

科技快訊 | OpenAI首次向免費用戶開放推理模型;特朗普與黃仁勛會面;雷軍回應“10后小學生深情表白小米SU7”

不用開口&#xff1a;谷歌 AI 幫你致電商家&#xff0c;價格、預約一鍵搞定 谷歌在1月30日推出Search Labs中的“Ask for Me”實驗性功能&#xff0c;用戶可利用AI代替自己致電商家咨詢價格和服務。該功能已與美汽車修理廠和美甲沙龍店合作&#xff0c;用戶需加入Search Labs并…

帆軟 FCA -業務分析師認證學習

帆軟 FCA -業務分析師認證學習 認證概述 適合人群 企業中有需求管理、指標梳理、業務邏輯梳理、項目規劃等需求的人員&#xff0c;想提升綜合數據能力、推進數據應用落地的業務/IT骨干。 具體-FCA-業務分析理論 考試要求&#xff1a; FCA-業務分析理論考試- 費用&#xff1a…

Vue.js路由管理與自定義指令深度剖析

Vue.js 是一個強大的前端框架,提供了豐富的功能來幫助開發者構建復雜的單頁應用(SPA)。本文將詳細介紹 Vue.js 中的自定義指令和路由管理及導航守衛。通過這些功能,你可以更好地控制視圖行為和應用導航,從而提升用戶體驗和開發效率。 1 自定義指令詳解 1.1 什么是自定義…

Maya軟件安裝步驟與百度網盤鏈接

軟件簡介&#xff1a; MAYA軟件是Autodesk旗下的著名三維建模和動畫軟件。maya軟件功能更為強大&#xff0c;體系更為完善&#xff0c;因此國內很多的三維動畫制作人員都開始轉向maya&#xff0c;maya軟件已成為三維動畫軟件的主流。 百度網盤鏈接: https://pan.baidu.com/s…

kamailio的部分模塊的解釋及代碼示例【文章由DeekSeek大模型提供】

以下是 Kamailio 中這些模塊的詳細說明及示例代碼&#xff1a; 1. tls.so 作用&#xff1a;提供 TLS 支持&#xff0c;用于加密 SIP 通信。示例&#xff1a;loadmodule "tls.so" modparam("tls", "certificate", "/etc/kamailio/tls/serve…

深入理解linux中的文件(上)

1.前置知識&#xff1a; &#xff08;1&#xff09;文章 內容 屬性 &#xff08;2&#xff09;訪問文件之前&#xff0c;都必須打開它&#xff08;打開文件&#xff0c;等價于把文件加載到內存中&#xff09; 如果不打開文件&#xff0c;文件就在磁盤中 &#xff08;3&…

一個用于測試的 HL7 Server

說明 一個用于測試的 HL7 Server。在過NIST的認證時&#xff0c;需要演示檢驗數據通過HL7進行傳輸&#xff0c;所以寫了這工具。 HL7的消息解析和編碼使用了NHapi。包含兩個服務&#xff1a; ReceiveServiceSendService 這2個服務都繼承自 BaseService public class BaseSe…

使用 Go 和 gqlgen 實現 GraphQL API:實戰指南

使用 Go 和 gqlgen 實現 GraphQL API&#xff1a;實戰指南 在本文中&#xff0c;我將分享如何使用 Go 語言和 gqlgen 框架實現一個完整的 GraphQL API。我們將構建一個包含用戶、文章和評論功能的博客系統 API。 技術棧 Gogqlgen (GraphQL 框架)MySQL (數據存儲)Redis (緩存…

matlab快速入門(2)-- 數據處理與可視化

MATLAB的數據處理 1. 數據導入與導出 (1) 從文件讀取數據 Excel 文件&#xff1a;data readtable(data.xlsx); % 讀取為表格&#xff08;Table&#xff09;CSV 文件&#xff1a;data readtable(data.csv); % 自動處理表頭和分隔符文本文件&#xff1a;data load(data.t…

洛谷題目 P5994 [PA 2014] Kuglarz 題解 (本題較難)

題目傳送門&#xff1a; P5994 [PA 2014] Kuglarz - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 前言&#xff1a; 本題涉及到最小生成樹中的 kruskal 算法和并查集算法&#xff0c;圖論基礎概念兩大知識點&#xff0c;瞎按對萊索沒有學過圖論的或最小生成樹的可能會對這道…