蓝桥杯例题一

news2025/1/31 4:08:48

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

蓝桥杯官网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 deque

def shortest_path(maze):
    m, n = len(maze), len(maze[0])
    directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]  # 上下左右四个方向
    
    # 找到起点和终点的位置
    start, end = None, None
    for 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
    
    # BFS
    queue = 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 dist
        
        for dx, dy in directions:
            nx, ny = x + dx, y + dy
            
            if 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] + 1
            else:
                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.coloradmin.cn/o/2286735.html

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

相关文章

WPF基础 | 深入 WPF 事件机制:路由事件与自定义事件处理

WPF基础 | 深入 WPF 事件机制&#xff1a;路由事件与自定义事件处理 一、前言二、WPF 事件基础概念2.1 事件的定义与本质2.2 常见的 WPF 事件类型 三、路由事件3.1 路由事件的概念与原理3.2 路由事件的三个阶段3.3 路由事件的标识与注册3.4 常见的路由事件示例 四、自定义事件处…

C++封装红黑树实现mymap和myset和模拟实现详解

文章目录 map和set的封装map和set的底层 map和set的模拟实现insertiterator实现的思路operatoroperator- -operator[ ] map和set的封装 介绍map和set的底层实现 map和set的底层 一份模版实例化出key的rb_tree和pair<k,v>的rb_tree rb_tree的Key和Value不是我们之前传统意…

如何用matlab画一条蛇

文章目录 源代码运行结果代码说明结果 源代码 % 画蛇的代码 % 2025-01-28/Ver1 % 清空环境 clc; clear; close all;% 定义蛇的身体坐标 t linspace(0, 4*pi, 100); % 参数化变量 x t; % x坐标 y sin(t) 0.5 * sin(3*t); % y坐标&#xff0c;形成更复…

DVC - 数据版本和机器学习实验的命令行工具和 VS Code 扩展

文章目录 一、关于 DVC二、快速启动三、DVC的工作原理四、VS代码扩展五、安装Snapcraft&#xff08;Linux&#xff09;Chocolatey (Windows)Brew (mac OS)Anaconda (Any platform)PyPI&#xff08;Python&#xff09;Package (Platform-specific)Ubuntu / Debian (deb)Fedora /…

理解神经网络:Brain.js 背后的核心思想

温馨提示 这篇文章篇幅较长,主要是为后续内容做铺垫和说明。如果你觉得文字太多,可以: 先收藏,等后面文章遇到不懂的地方再回来查阅。直接跳读,重点关注加粗或高亮的部分。放心,这种“文字轰炸”不会常有的,哈哈~ 感谢你的耐心阅读!😊 欢迎来到 brain.js 的学习之旅!…

Maui学习笔记- SQLite简单使用案例02添加详情页

我们继续上一个案例&#xff0c;实现一个可以修改当前用户信息功能。 当用户点击某个信息时&#xff0c;跳转到信息详情页&#xff0c;然后可以点击编辑按钮导航到编辑页面。 创建项目 我们首先在ViewModels目录下创建UserDetailViewModel。 实现从详情信息页面导航到编辑页面…

Autogen_core 测试代码:test_cache_store.py

目录 原始代码测试代码代码中用到的typing注解 原始代码 from typing import Dict, Generic, Optional, Protocol, TypeVarT TypeVar("T")class CacheStore(Protocol, Generic[T]):"""This protocol defines the basic interface for store/cache o…

变压器的漏感

测量变压器漏感的时候需要将次级绕组短路&#xff1a; 测量变压器初级线圈的电感方法很简单&#xff0c;直接用LCR测量就可&#xff0c;无需像测量漏感那样将次级绕组短接&#xff1a;

从ChatGPT热潮看智算崛起

2025年1月7日&#xff0c;科智咨询发布《2025年IDC产业七大发展趋势》&#xff0c;其中提到“ChatGPT开启生成式AI热潮&#xff0c;智能算力需求暴涨&#xff0c;算力供给结构发生转变”。 【图片来源于网络&#xff0c;侵删】 为何会以ChatGPT发布为节点呢&#xff1f;咱们一起…

攻克 AI 幻觉难题

当下&#xff0c;AI 已经成为我们生活中不可或缺的一部分。无论是智能语音助手&#xff0c;还是对话式的AI模型&#xff0c;它们凭借强大的算法和海量的数据&#xff0c;为我们答疑解惑、出谋划策。 然而&#xff0c;小编今天向AI提问&#xff1a;上山打老虎。他却回答&#x…

格式化时间的插件

1.安装dayjs包 npm i dayjs 2.组件中的应用

自创《艺术人生》浅析

艺术是生活的馈赠&#xff0c;艺术是苦痛的呻吟。 笔记模板由python脚本于2025-01-29 00:01:11创建&#xff0c;本篇笔记适合喜欢写诗读诗诵诗的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 …

防御保护第一次实验:安全策略配置

一、实验拓扑 二、实验要求 三、需求分析 1.创建两个vlan 2.在ENSP中配置基于时间的ACL实现对于办公区PC访问OA Server的时间限制&#xff08;工作日早8到晚6&#xff09;。 3.通过配置基于MAC地址的ACL来实现对于生产区PC访问Web Server的限制&#xff08;除PC3外不能访问&am…

【Pytest】生成html报告中,中文乱码问题解决方案

链接上一篇文章:https://blog.csdn.net/u013080870/article/details/145369926?spm1001.2014.3001.5502 中文乱码问题&#xff0c;python3&#xff0c;Python3.7后&#xff0c;还一个文件就是result.py 因为中文可以在内容中&#xff0c;也可能在文件名&#xff0c;类名&…

【ollama通过命令行启动后如何在网页端查看运行】

ollama通过命令行启动后如何在网页端查看运行 http://localhost:11434/

Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin

Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊&#xff08;毛玻璃&#xff09;对比&#xff0c;Kotlin import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas import android.graphics.RectF …

Jetpack Compose 和 Compose Multiplatform 还有 KMP 的关系

今天刚好看到官方发布了一篇文章&#xff0c;用于讨论 Compose Multiplatform 和 Jetpack Compose 之间的区别&#xff0c;突然想起之前评论区经常看到说 “Flutter 和 CMP 对于 Google 来说项目重叠的问题”&#xff0c;刚好可以放一起聊一聊。 最近写的几篇内容写的太干&…

python生成图片和pdf,快速

1、下载安装 pip install imgkit pip install pdfkit2、wkhtmltopdf工具包&#xff0c;下载安装 下载地址&#xff1a;https://wkhtmltopdf.org/downloads.html 3、生成图片 import imgkit path_wkimg rD:\app\wkhtmltopdf\bin\wkhtmltoimage.exe # 工具路径&#xff0c;安…

解锁FPGA的故障免疫密码

我们身处“碳基智能”大步迈向“硅基智能”序曲中,前者更像是后者的引导程序,AI平民化时代,万物皆摩尔定律。 越快越好,几乎适用绝大多数场景。 在通往人工智能的征程中,算力无处不在,芯片作用无可替代。 十六年前,就已宣称自己是一家软件公司的英伟达,现已登顶全球…

【数据结构】初识链表

顺序表的优缺点 缺点&#xff1a; 中间/头部的插入删除&#xff0c;时间复杂度效率较低&#xff0c;为O(N) 空间不够的时候需要扩容。 如果是异地扩容&#xff0c;增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间&#xff0c;会有不小的消耗。 扩容可能会存在…