蓝桥杯例题一

server/2025/1/30 7:53:36/

不管遇到多大的困难,我们都要坚持下去。每一次挫折都是我们成长的机会,每一次失败都是我们前进的动力。路漫漫其修远兮,吾将上下而求索。只有不断努力奋斗,才能追逐到自己的梦想。不要害怕失败,害怕的是不敢去尝试。只有敢于面对挑战,才能收获成功的喜悦。我们要相信自己的能力,坚信自己可以做到。生活可以很艰难,但我们要有勇气去面对,有决心去战胜它。相信自己,努力拼搏,我们一定能够创造属于自己的辉煌!

蓝桥杯官网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.ppmy.cn/server/163449.html

相关文章

【Linux基础指令】第三期

近期更新的基础指令链接&#xff1a; 【Linux基础指令】第一期-CSDN博客 【Linux基础指令】第二期-CSDN博客 本期博客的主题依旧是 "基础指令" &#xff1b;话不多说&#xff0c;正文开始。 一、Linux的指令 1.zip / unzip 功能&#xff1a;打包压缩 命令格式&…

一文大白话讲清楚webpack基本使用——16——图片压缩

文章目录 一文大白话讲清楚webpack基本使用——16——图片压缩1. 建议按文章顺序从头看&#xff0c;一看到底&#xff0c;豁然开朗2. 为啥要压缩图片3. 怎么压缩4. image-webpack-loader压缩原理 一文大白话讲清楚webpack基本使用——16——图片压缩 1. 建议按文章顺序从头看&…

Android Studio 新版本24.2.2 运行后自动切到 LogCat

最近更新了 Android studio 版本&#xff0c;发现有个问题&#xff1a; 每次 Run app 之后。都会自动切换到 run 标签。这让我非常不习惯。我个人习惯在app 运行后查看Logcat 最后靠 deepSeek 找到一种解决方案&#xff1a; Android Studio 中截图如下&#xff1a;

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.20 极值追踪:高效获取数据特征的秘诀

1.20 极值追踪&#xff1a;高效获取数据特征的秘诀 1.20.1 目录 #mermaid-svg-RBxy2YCCN23ydzFu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-RBxy2YCCN23ydzFu .error-icon{fill:#552222;}#mermaid-svg-RBxy2YC…

使用 Python 和 Tesseract 实现验证码识别

验证码识别是一个常见且实用的技术需求&#xff0c;尤其是在自动化测试和数据采集场景中。通过开源 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;工具 Tesseract&#xff0c;结合 Python 的强大生态&#xff0c;我们可以高效实现验证码识…

从Stargate看全球科技变局与中国IT互联网的破局之路

从Stargate看全球科技变局与中国IT互联网的破局之路 科技新势力:Stargate 的诞生 在科技发展的长河中,每一次巨头间的携手都宛如一颗投入湖面的巨石,激起千层浪。软银、NVIDIA、Oracle 共同组建 Stargate 公司这一事件,无疑是 AI 领域的一场 “超级风暴”。美国当地时间 2025…

【故障诊断】量子粒子群优化极限学习机实现乳腺癌诊断,(QPSO-ELM)数据分类

1.简介 本文采用量子粒子群优化极限学习机实现乳腺癌诊断&#xff0c;极限学习机&#xff08;ELM&#xff09;用来训练单隐藏层前馈神经网络&#xff08;SLFN&#xff09;与传统的SLFN训练算法不同&#xff0c;极限学习机随机选取输入层权重和隐藏层偏置&#xff0c;输出层权重…

css之多边形 clip-path

平行四边形 clip-path: polygon(25% 0, 75% 0, 100% 0%, 75% 100%, 0% 100%, 0 100%);平行四边形图片展示 多边形 clip-path: polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%, 0 10px);多边形图片展示