蓝桥杯例题一

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

蓝桥杯官网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.mzph.cn/web/67663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE进阶】图书管理系统 - 壹

目录 &#x1f332;序言 &#x1f334;前端代码的引入 &#x1f38b;约定前后端交互接口 &#x1f6a9;接口定义 &#x1f343;后端服务器代码实现 &#x1f6a9;登录接口 &#x1f6a9;图书列表接口 &#x1f384;前端代码实现 &#x1f6a9;登录页面 &#x1f6a9;…

【算法设计与分析】实验8:分支限界—TSP问题

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握分支界限求解问题的思想&#xff1b;针对不同的问题&#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;…

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…

帆软 FCA -业务分析师认证学习

帆软 FCA -业务分析师认证学习 认证概述 适合人群 企业中有需求管理、指标梳理、业务逻辑梳理、项目规划等需求的人员&#xff0c;想提升综合数据能力、推进数据应用落地的业务/IT骨干。 具体-FCA-业务分析理论 考试要求&#xff1a; FCA-业务分析理论考试- 费用&#xff1a…

Maya软件安装步骤与百度网盘链接

软件简介&#xff1a; MAYA软件是Autodesk旗下的著名三维建模和动画软件。maya软件功能更为强大&#xff0c;体系更为完善&#xff0c;因此国内很多的三维动画制作人员都开始转向maya&#xff0c;maya软件已成为三维动画软件的主流。 百度网盘链接: https://pan.baidu.com/s…

深入理解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…

洛谷题目 P5994 [PA 2014] Kuglarz 题解 (本题较难)

题目传送门&#xff1a; P5994 [PA 2014] Kuglarz - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言&#xff1a; 本题涉及到最小生成树中的 kruskal 算法和并查集算法&#xff0c;图论基础概念两大知识点&#xff0c;瞎按对莱索没有学过图论的或最小生成树的可能会对这道…

消息队列篇--通信协议篇--网络通信模型(OSI7层参考模型,TCP/IP分层模型)

一、OSI参考模型&#xff08;Open Systems Interconnection Model&#xff09; OSI参考模型是一个用于描述和标准化网络通信功能的七层框架。它由国际标准化组织&#xff08;ISO&#xff09;提出&#xff0c;旨在为不同的网络设备和协议提供一个通用的语言和结构&#xff0c;以…

C# Winform制作一个登录系统

using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 登录 {p…

记一次STM32编译生成BIN文件过大的问题(基于STM32CubeIDE)

文章目录 问题描述解决方法更多拓展 问题描述 最近在一个项目中使用了 STM32H743 单片机&#xff08;基于 STM32CubeIDE GCC 开发&#xff09;&#xff0c;它的内存分为了 DTCMRAM RAM_D1 RAM_D2 …等很多部分。其中 DTCM 的速度是比通常的内存要快的&#xff0c;缺点是不支持…

996引擎 -地图-添加安全区

996引擎 -地图-添加安全区 文件位置配置 cfg_startpoint.xls特效效果1345参考资料文件位置 文件位置服务端D:\996M2-lua\MirServer-lua\Mir200客户端D:\996M2-lua\996M2_debug\dev配置 cfg_startpoint.xls 服务端\Mir200\Envir\DATA\cfg_startpoint.xls 填歪了也有可能只画一…

【leetcode强化练习·二叉树】同时运用两种思维解题

本文参考labuladong算法笔记[【强化练习】同时运用两种思维解题 | labuladong 的算法笔记] 有的题目可以同时用「遍历」和「分解问题」两种思路来解&#xff0c;你可以利用这些题目训练自己的思维。 559. N 叉树的最大深度 | 力扣 | LeetCode | 给定一个 N 叉树&#xff0c;…

栈和队列特别篇:栈和队列的经典算法问题

图均为手绘,代码基于vs2022实现 系列文章目录 数据结构初探: 顺序表 数据结构初探:链表之单链表篇 数据结构初探:链表之双向链表篇 链表特别篇:链表经典算法问题 数据结构:栈篇 数据结构:队列篇 文章目录 系列文章目录前言一.有效的括号(leetcode 20)二.用队列实现栈(leetcode…

ios swift画中画技术尝试

继上篇&#xff1a;iOS swift 后台运行应用尝试失败-CSDN博客 为什么想到画中画&#xff0c;起初是看到后台模式里有一个picture in picture&#xff0c;去了解了后发现这个就是小窗口视频播放&#xff0c;方便用户执行多任务。看小窗口视频的同时&#xff0c;可以作其他的事情…

人生不止于职业发展

0 你的问题&#xff0c;我知道&#xff01; 工作意义是啥&#xff1f;职业发展在人生啥角色&#xff1f; 1 工作意义 农村人努力学习考上大学&#xff0c;得好工作&#xff0c;为逃离同村同龄人十几岁就工厂打工命运&#xff0c;过不凡人生&#xff0c;实现改命的唯一途径。…

【算法设计与分析】实验3:动态规划—最长公共子序列

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握动态规划求解问题的思想&#xff1b;针对不同的问题&#xff0c;会利用动态规划进行设计求解以及时间复杂度分析&#xff0…