专门做任务的网站6,官方入口,国家企业信用信息公示系统(安徽),网站开发 附加协议1.题目
这道题是蓝桥云课上面的一道题目#xff0c;它是2022年蓝桥杯省模拟题#xff0c;题目难度为简单。
考察的知识点为递归。
题目链接#xff1a;X图形 2.思路
如何理解题意#xff1f;
蓝桥杯的题目和Leetcode题目最大的不同点在于#xff0c;蓝桥杯的题目大部…1.题目
这道题是蓝桥云课上面的一道题目它是2022年蓝桥杯省模拟题题目难度为简单。
考察的知识点为递归。
题目链接X图形 2.思路
如何理解题意
蓝桥杯的题目和Leetcode题目最大的不同点在于蓝桥杯的题目大部分都是以实际问题出发的因此对于蓝桥杯的题目我们首先得弄懂题意这点我们可以从两个地方进行理解
题目要求题目样例
这两个地方可以很好的帮助我们理解题目的意思从而找到合适算法来解题这题是让我们求图形中有X图案的图形有几个。例如对于最小的X图形它有以下的规律
它中间的字母和左上、左下、右上、右下的字母都是一样的之后的同理可得。 怎么递归
有了前面的规律后我们得找到递归的触发条件和终止条件。那么怎么触发递归函数呢
很明显这道题的核心点是每个X图形的中心点因此我们可以二重循环遍历二维数组将每个坐标都当做是X图形的中心点。
那终止条件呢对于X图形如果我中间的字母和左上、左下、右上、右下的字母都是一样的那么我是可以在小X图形上1的。终止条件就是不满足上面的那个条件就返回0举个栗子
下面这个图形我们可以得知它有2个X图形而对于最外层的X它是基于里面的小X图形上1的。 3.代码
# 输入行和列
row,col tuple(map(int,input().split()))
# 输入矩阵字母
arr [input() for r in range(row)]
# 保存最终结果
cnt 0
# 递归函数
def check(r,c,n):# 如果左上、左下、右上、右下坐标没有超出边界if r-n 0 and c-n0 and rnrow and cncol:# 保存左上、左下、右上、右下、中心的坐标n为X图形的半径narr set([arr[r][c],arr[r-n][c-n],arr[rn][c-n],arr[r-n][cn],arr[rn][cn]])else:return 0# 如果5个坐标的字母都是一样的去重后narr长度肯定为1if len(narr) 1:# 递归 1X半径1return check(r,c,n1) 1else:return 0# 循环判断每个中心点
for r in range(1,row-1):for c in range(1,col-1):# 加入到结果之中cnt check(r,c,1)
print(cnt)