python 基础知识点(蓝桥杯python科目个人复习计划58)

今日复习内容:做题

例题1:仙境诅咒

问题描述:

在一片神秘的仙境中,有N位修仙者,他们各自在仙境中独立修炼,拥有他们独特的修炼之地和修炼之道,修炼者们彼此之间相互尊重,和平相处。

然而,有一天,仙境的主宰者妮妮(第一位修仙者)收到了诅咒,该诅咒会向距离妮妮不超过D的范围内范围内的修仙者传播。也就是说,如果一个修仙者被诅咒,那么在距他不超过D的范围内的修仙者都会收到诅咒。

现在,你需要预测哪些修仙者最终会被诅咒,以便及时采取措施,保护仙境的和平与安宁。

输入格式:

第一行输入一个正整数N(1 <= N <= 10^3),表示仙境中有N位修仙者。

接下来N行,每行两个实数Xi和Yi(-10^3 <= Xi,Yi <= 10^3),表示第i位修仙者的坐标(Xi,Yi),第一位修仙者即仙境的主宰者妮妮。

最后一行输入一个整数D(1 <= D <= 10^3),表示诅咒传播的范围。

输出格式:

输出N行,每行一个整数,第i行整数为1表示第i位修仙者最终被诅咒,若为0则没有被诅咒。

参考答案:

def dis(x1,y1,x2,y2):return (x1 - x2) ** 2 + (y1 - y2) ** 2 <= D ** 2
def dfs(x,y):for i in range(n):if not vis[i] and dis(x,y,wh[i][0],wh[i][1]):vis[i] = Truedfs(wh[i][0],wh[i][1])n = int(input())
wh = [list(map(int,input().split())) for i in range(n)]
D = int(input())
vis = [False] * n
vis[0] = True
dfs(wh[0][0],wh[0][1])
for i in vis:print(int(i))

运行结果:

以下是我对此题的理解:

用深度优先搜索,首先定义一个函数dis用来判断两个修仙者之间的距离是否超过D,然后再定义一个函数dfs,用来递归地搜索收到诅咒的修仙者。接着读取输入,初始化修仙者的坐标和诅咒的范围。然后标记仙境的主宰者妮妮已经收到诅咒,从主宰者的位置开始进行dfs搜索,将与主宰者的距离小于等于D的修仙者标记为收到诅咒,最后输出每个修仙者是否收到诅咒的标记。

整体思路就是从主宰者妮妮开始,逐个遍历与其距离小于等于D的修仙者,并将其标记为收到诅咒。

dfs(x1,y1,x2,y2):

return (x1 - x2) ** 2 + (y1 - y2) ** 2 <= D ** 2

这是一个函数dis,用于计算两个修仙者之间的距离是否小于等于给定范围D的平方。通过欧氏距离的平方来比较两个修仙者之间的距离与给定距离之间的大小关系,以避免使用开方运算,提高效率。

def dfs(x,y):

定义一个函数

for i in range(n):这个循环遍历所有的修仙者,其中n是修仙者的总数

if not vis[i] and dis(x,y,wh[i][0],wh[i][1]):这个条件判断语句检查当前遍历到的修仙者是否未被访问和且与当前正在搜索的点的距离小于等于D,如果满足这两个条件,

vis[i] = True

将满足条件的修仙者标记为已收到诅咒。

dfs(wh[i][0],wh[i][1]):递归地调用dfs函数,以当前修仙者的坐标(wh[i][0],wh[i][1])为新的起点,继续进行深度搜索,寻找与该修仙者距离小于等于D的其他修仙者。

n = int(input())

wh = [list(map(int,input().split())) for i in range(n)]

D = int(input())

vis = [False] * n

vis[0] = True

dfs(wh[i][0],wh[i][1])

这部分代码用于读入和初始化。首先读取输入的修仙者数量n,然后依次读入每个修仙者的坐标和诅咒的范围,然后初始化一个布尔数组vis,用于标记修仙者是否收到诅咒。初始时,仙境的主宰者妮妮被标记为已收到诅咒,,即vis[] = True,然后从主宰者妮妮的位置开始调用dfs函数进行DFS搜索。

for i in vis:

print(int(i))

输出每个修仙者是否收到诅咒的标记,即输出布尔数组vis中的各个元素。


例题2:小怂爱水洼

问题描述:

小怂喜欢收集水洼里的水,他每到一个水量不为0的水洼中就会收集里面所有的水。

小怂去到了一个大小为N * M的水洼,水洼上的每一个小水洼水量为ai,j(i属于[1,n],j属于[1,m]),假设小怂的起点是(1,1),他可以移动无数次,每次移动只能移动到当前水洼上下左右四个方向的相邻小水洼上,并且需要满足相邻小水洼的水量大于0,即如果新的小水洼量为0,小怂就不能走到这个小水洼上。特别地,小怂可以重复走到某块小水洼,但是小水洼中的水只能被收集一次,如果起始点的水洼有水,他会收集那些水。

值得注意的是,每块上下左右相邻且水量不为0的小水洼可以汇集成一个大水洼,小怂每到一个新的大水洼,他之前收集到的水量会变为0。

求解小怂在大水洼中可以收集到的最大水量。

输入格式:

第一行是两个整数N和M,分别表示行数和列数。

接下来N行,每行包括M个整数,每个整数表示当前位置的小水洼的水量。

数据范围保证:1 <= N,M <= 100,1 <= ai,j <= 10^6(数据不保证起始点不为0)

输出格式:

输出共一行,一个整数,表示小怂在水洼中可以收集到的最大水量。

参考答案:

import sys
sys.setrecursionlimit(1000000)
inds = [[1,0],[-1,0],[0,1],[0,-1]]
def dfs(x,y):vis[x][y] = Trueans = water[x][y]for ind in inds:cur_x = x + ind[0]cur_y = y + ind[1]if n > cur_x >= 0 and m > cur_y >= 0 and not vis[cur_x][cur_y] and water[cur_x][cur_y] != 0:ans += dfs(cur_x,cur_y)return ans
n,m = map(int,input().split())
water = [list(map(int,input().split())) for i in range(n)]
vis = [[False] * m for i in range(n)]
ans = 0
for i in range(n):for j in range(m):if not vis[i][j] and water[i][j] != 0:ans = max(ans,dfs(i,j))
print(ans)

运行结果:

以下是我对此题的理解:

对于这道题,我的思路是:

1.导入模块和设置递归深度限制

导入sys 模块,并设置递归深度限制

2.定义移动方向和dfs函数

定义了一个列表,用来记录小怂可以走的4个方向:上下左右

定义了深度优先搜索函数dfs,用来从当前水洼的位置(x,y)开始递归地搜索可以收集水的水洼,并返回小怂在该大水洼中能收集到的水量。

3.初始化水洼信息和访问标记

读取输入大小为N * M 的水洼,其中每个小水洼的水量用二维列表water表示,并初始化一个二维布尔数组vis用于标记该水洼是否被访问过。

4.dfs搜索和计算最大水量

使用两层循环来遍历所有水洼;

对于某个未被访问且水量不为0的水洼,调用dfs函数进行搜索,并更新最大水量。

在dfs函数中,首先标记当前水洼为已访问,并初始化当前水洼的水量为最大水量。然后,依次尝试向4个方向移动,并递归地计算可以收集到的水量。最后返回当前水洼可以收集到的水量。

在移动过程中,如果移动到一个新的大水洼,则当前收集到的水量变为0,因为小怂已经收集过当前水洼的水了。

5.输出结果


例题3:串变换

问题描述:

有两个长度为n的数字字符串S和T,下标从0开始。

一共有k个操作,操作只可能是一下两种类型:

  • 1 x y 表示将Sx变为(Sx + v) mod 10;
  • 2 x y 表示交换Sx,Sy

你可以挑选出任意个操作,以任意顺序执行,但是每个操作只能最多执行一次 ,如果可以将S串变为T串则输出Yes,否则输出No。

输入格式:

第一行输入一个正整数n,用于表示S和T的长度;

第二行输入一个只由数字组成,长度为n的字符串S;

第三行输入一个只由数字组成,长度为n的字符串T;

第四行输入一个正整数k,表示操作次数。

接下来k行,每行3个整数,其中第i行表示第i种操作的3个参数:opi,xi,yi。

输出格式:

一行一个字符串:

如果可以通过操作使得S串等于T串,则输出Yes,否则输出No。

参考答案:

flag = False
def check(path):global flagstr_ = list(map(int,list(s)))for i in path:if ops[i][0] == 1:str_[ops[i][1]] += ops[i][2]str_[ops[i][1]] %= 10else:str_[ops[i][1]],str_[ops[i][2]] = str_[ops[i][2]],str_[ops[i][1]]if ''.join(list(map(str,str_))) == t:flag = Truedef dfs(depth):if flag:returnif depth >= k:check(path)returnfor i in range(k):if not vis[i]:vis[i] = Truepath.append(i)dfs(depth + 1)vis[i] = Falsepath.pop()dfs(k)n = int(input())
s = input()
t = input()
k = int(input())
ops = [list(map(int,input().split())) for i in range(k)]
path = []
vis = [False] * k
dfs(0)
if flag:print('Yes')
else:print('No')

运行结果:


OK,这几个题有点难,所以我就只写这些,下一篇继续!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721222.shtml

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

相关文章

P-States/C-States/S-States/G-States/D-States

P-States是指处理器的性能状态&#xff0c;可以根据需要调整处理器的工作频率和电压来平衡性能和能效。 S-States是指系统的睡眠状态&#xff0c;可以让系统在空闲时进入低功耗状态以节省能量。 G-States是系统的全局状态&#xff0c;通常用于描述整个系统的运行状态。 C-St…

用ChatGPT计算植被归一化指数NDVI并出图的详细教程

用ChatGPT结合GIS计算植被归一化指数NDVI出图教程 用ENVI计算比较繁琐&#xff0c;如今AI的盛行&#xff0c;我们可以轻松解决计算问题&#xff0c;只需1一分钟变可以出图。 详细教学请看上方视频步骤。 更多ChatGPT教学内容请见&#xff1a;ChatGPT结合GIS&#xff1a;一分钟…

如何在Vue中进行单元测试?

前端开发中&#xff0c;单元测试是一个非常重要的环节&#xff0c;它可以帮助我们在开发过程中发现潜在的问题&#xff0c;并确保我们的代码在不断迭代的过程中依然能够保持稳定。在Vue中进行单元测试同样非常重要&#xff0c;本文将介绍如何在Vue项目中进行单元测试。 在Vue中…

Qt::TabWidget

在Tab的右上角添加控件 QPushButton *add new QPushButton; add->setText(""); add->resize(30,30); ui->tabWidget->setCornerWidget(add,Qt::TopRightCorner); 结果&#xff1a; Tab添加子页 QWidget*newp new QWidget; ui->tabWidget->add…

【脑切片图像分割】MATLAB 图像处理 源码

1. 简单图像处理 加载图像 Brain.jpg&#xff0c;使用直方图和颜色分割成区域这些区域有不同的颜色。 这是一个更高级的问题&#xff0c;有多个解决它的方法。 例如&#xff0c;您可以计算具有特定数字的图像的直方图&#xff08;例如 16 - 32&#xff09;&#xff0c;找到直方…

蜂窝物联:智慧生态茶园建设方案

一、项目背景 为了进一步提高茶产业集约化、产业化发展水平&#xff0c;充分运用物联网、互联网等高新技术为产业赋能&#xff0c;加速推动安溪茶产业转型升级&#xff0c;县政府决定在安溪县推进“安溪智慧生态茶园项目”&#xff0c;并以茶叶重镇感德镇实施“安溪智慧生态茶…

分享一本好书《大模型应用开发极简入门:基于GPT-4和ChatGPT》

如果问个问题&#xff1a;有哪些产品曾经创造了伟大的奇迹&#xff1f;ChatGPT 应该会当之无愧入选。仅仅发布 5 天&#xff0c;ChatGPT 就吸引了 100 万用户——当然&#xff0c;数据不是关键&#xff0c;关键是其背后的技术开启了新的 AI 狂潮&#xff0c;成为技术变革的点火…

Python知识汇总

重要链接&#xff1a; matplotlib库&#xff1a;matplotlib — Matplotlib 3.5.1 documentation DataFrame库&#xff1a;DataFrame — pandas 2.2.1 documentation (pydata.org) Python Matplotlib 实现散点图、曲线图、箱状图、柱状图示例&#xff1a;Python Matplotlib 实…

深度学习预测分析API:金融领域的Game Changer

&#x1f680; 引言 在这个AI遍地开花的时代&#xff0c;谁能成为金融领域的真正Game Changer&#xff1f;那必然是是深度学习预测分析API。如大脑般高效运转的系统不仅颠覆了传统操作&#xff0c;更是以无与伦比的速度和精度赋予了金融数据以全新的生命。 &#x1f4bc; 广泛…

uniapp制作--进步器的选择

介绍&#xff1a; 进步器的选择,一般用于商城购物选择物品数量的场景 注意&#xff1a;该输入框只能输入大于或等于0的整数 效果展示&#xff1a; 代码展示&#xff1a; 以下是一个简单的购物车页面示例&#xff0c;包括选择商品和显示数量的功能&#xff1a; 在这个示例中…

探索人工智能的关键术语与方法

目录 前言1 机器学习&#xff08;Machine Learning&#xff09;2 数据科学&#xff08;Data Science&#xff09;3 监督学习&#xff08;Supervised Learning&#xff09;4 无监督学习&#xff08;Unsupervised Learning&#xff09;5 深度学习&#xff08;Deep Learning&#…

紫光展锐T618_4G安卓核心板方案定制

紫光展锐T618核心板是一款采用纯国产化方案的高性能产品&#xff0c;搭载了开放的智能Android操作系统&#xff0c;并集成了4G网络&#xff0c;支持2.5G5G双频WIFI、蓝牙近距离无线传输技术以及GNSS无线定位技术。 展锐T618核心板应用旗舰级 DynamlQ架构 12nm 制程工艺&#x…

私有化部署自己的ChatGPT,免费开源的chatgpt-next-web搭建

随着AI的应用变广&#xff0c;各类AI程序已逐渐普及&#xff0c;尤其是在一些日常办公、学习等与撰写/翻译文稿密切相关的场景&#xff0c;大家都希望找到一个适合自己的稳定可靠的ChatGPT软件来使用。 ChatGPT-Next-Web就是一个很好的选择。它是一个Github上超人气的免费开源…

简单介绍一下Qt动画系统,并举例说明如何使用

目录 Qt动画系统介绍 分类举例说明 1. 属性动画&#xff08;Property Animation&#xff09;&#xff1a; 2. 并行动画&#xff08;Parallel Animation&#xff09;&#xff1a; 3. 顺序动画&#xff08;Sequential Animation&#xff09;&#xff1a; 4. 动画组&#xf…

闯入监测报警摄像机

闯入监测报警摄像机是用于监测和报警未经授权者闯入特定区域的安全设备。该摄像机通常设置在建筑物、仓库、办公室等需要保护的场所&#xff0c;用于监控周围环境并及时警示相关人员。闯入监测报警摄像机是一种集视频监控和报警功能于一体的安全设备&#xff0c;旨在防范和监测…

2024/3/5打卡线性DP问题---数字三角形*

线性DP&#xff1a; 所谓线性DP&#xff0c;是指递推方程有一种明显的线性关系存在。 在状态规划中&#xff0c;状态可以是一维的&#xff0c;二维的&#xff0c;多维的。例如&#xff0c;在背包问题中&#xff0c;就是一个二维的状态&#xff0c;在求解状态的时候&#xff0c;…

【Deep Dive:AI Webinar】我们是否能将开源许可用于机器学习和人工智能模型?

【深入探讨人工智能】网络研讨系列总共有 17 个视频。我们按照视频内容&#xff0c;大致上分成了 3 个大类&#xff1a; 1. 人工智能的开放、风险与挑战&#xff08;4 篇&#xff09; 2. 人工智能的治理&#xff08;总共 12 篇&#xff09;&#xff0c;其中分成了几个子类&…

IDEA创建Sping项目只能勾选17和21,却无法使用Java8

报错信息 The required java version 17 is not supported by the project SDK 1.8.The maximum supported Java version is 8. 想创建一个springboot项目&#xff0c;本地安装jdk版本为1.8&#xff0c;但是在使用 Spring Initializr创建项目时,版本只能选择21或17&#xff0c;…

MySQL面试题纯享版

基础内容 1、MySQL的架构分层 2、一条 SQL 查询语句的执行流程 3、如何查看 MySQL 服务被多少个客户端连接了&#xff1f; 4、 空闲连接会一直占用着吗&#xff1f; 5、MySQL 的连接数有限制吗&#xff1f; 6、 怎么解决长连接占用内存的问题&#xff1f; 7、执行器与存储引擎…

rust学习(tokio future分析)

自己编写一个impl future来看一下Tokio的是如何实现的。 第一步&#xff1a; 代码&#xff1a; struct TExecuteTask {count:u32 }impl Future for TExecuteTask {type Output ();fn poll(self: Pin<&mut Self>, cx: &mut Context<_>) -> Poll<S…