目录

  • 一、题目内容:
  • 二、思路:
  • 三、python代码:
  • 4、总结

一、题目内容:



二、思路:

看到这个图案,肯定是自相似的,所以肯定用递归解决这个问题。
但是具体怎样的呢?
(1)这个其实就是二维矩阵,所以是要判断每个位置是不是要填给定字符,如果确定了每个位置填或不填,那不就解决问题了嘛;
(2)用两个for循环不就遍历了所有的位置了么,所以这个也简单,现在的难点在于如何知道每个位置要填,所以用一个函数判断;
(3)这个判断的函数需要三个参数,一个是边长数,另外两个是坐标。边界条件是n=1就返回True(只有一个位置,那肯定要填的);另一种情况是判断坐标是不是在中间,在中间则不填,返回False;如果上述两种情况都不是,那就递归自身寻找答案,至于里面的参数,肯定是要减小规模的,边长除以3取商好理解,坐标不是太好理解的,需要自己去试,比如下面这两个位置,其实就是同一个问题的更小规模,取余正好就得到了答案。

三、python代码:

def carpet(n, char):def check(n, x, y):  # 难点在这个判断函数,使用了递归if n<=1:  # 边界条件(只有一个位置,那肯定要填的)return Truen2 = n // 3if n2<=x<n2*2 and n2<=y<n2*2:  #正方形中间的位置不填return False# 前两种情况都不是,这个位置是否填,需要递归调用才能知道,# 里面的3个参数都需要减小规模,n2为边长(取商),x,y是坐标位置,# 取余就是减小规模对应的子位置。return check(n2, x%n2, y%n2) for x in range(n):for y in range(n):if check(n, x, y):print(char, end='')else:print(' '*len(char), end='')  # 这个是输入空格的情况print('')if __name__ == "__main__":n = int(input())char = input()carpet(n, char)

4、总结

(1)看到这种在二维矩阵的图案或者字母啥的,肯定是要遍历每个位置的,用两个for循环;
(2)对于大问题是由小问题组成的,需要用递归,用递归的时候,三要素(边界条件、减小规模、调用自身)要注意。不要想每一步怎么出来的,要站在一定的高度想问题,也就是说,想最小的问题是怎么解决的,那整个问题就是怎么解决的,所以每次就按最小问题来写代码。如本题中,你就想成3x3的正方形,3x3怎么出来的,当把规模变大,还是一样的解决办法。

python实现——ASCII谢尔宾斯基地毯相关推荐

  1. 陈斌老师《数据结构与算法Python版》第五周作业——ASCII谢尔宾斯基地毯

    陈斌老师<数据结构与算法Python版>第五周作业--ASCII谢尔宾斯基地毯 题目 思路 程序如下 总结 题目 谢尔宾斯基地毯是形如上图的正方形分形图案,每个地毯可分为等大小的9份,其中 ...

  2. python数据结构与算法40题_Python数据结构与算法40:递归编程练习题3:ASCII谢尔宾斯基地毯...

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 递归编程练习题3:ASCII谢尔宾斯基地毯 谢尔宾斯基地毯 谢尔宾斯基地毯是形如上图的正方形分形 ...

  3. python与分形0009 - 谢尔宾斯基地毯

    分形介绍 分形是一个悖论. 它惊人的简单,却又无限的复杂. 它很新,却又比尘埃更古老. 分形是什么?它们是从哪里来的?我们为什么要在乎? 20世纪非传统的数学家Benoit Mandelbrot在19 ...

  4. Python实验舱谢尔宾斯基地毯绘制教程

    谢尔宾斯基地毯,和谢尔宾斯基三角形相似,下图就是谢尔宾斯基地毯 一,起始代码 p.width(3) p.speed(10) import turtle n=int(input()) base=int( ...

  5. OpenGL进阶(七)-康托尔集 谢尔宾斯基地毯 Koch雪花

    这一篇关于分形图像,当然只是入门. 分形通常被定义为"一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状",即具有自相似的性质.分形有几种类型 ...

  6. Java学习日记:UI篇(6)--谢尔宾斯基地毯图

    Java学习日记:UI篇(6)–谢尔宾斯基地毯图 引言:谢尔宾斯基地毯是数学家谢尔宾斯基提出的一个分形图形,谢尔宾斯基地毯和谢尔宾斯基三角形基本类似,不同之处在于谢尔宾斯基地毯采用的是正方形进行分形构 ...

  7. Java面向对象编程:利用递归思想绘制“谢尔宾斯基地毯”和“谢尔宾斯基三角形”

    1.递归:在方法中调用本方法. 2.递归调用会无限循环下去,因此方法体中必须有结束方法的条件.返回值为void时通常写为: if (条件) {return; } 下面使用递归绘制"谢尔宾斯基 ...

  8. 画完三角形再画谢尔宾斯基地毯

    照样废话不说,看代码看注释 import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import jav ...

  9. 按钮动作监听器和鼠标监听器的同时实现,在画图板上画出三角形,射线,曲笔,谢尔宾斯基三角形,谢尔宾斯基地毯Random类的实现,数组的实现,Thread.sleep的实现

    按钮动作监听器和鼠标监听器的实现 实例化 实现 监听器的类 DrawListener dl = new DrawListener();// 在界面上添加鼠标监听器对象(鼠标监听器的对象可以是界面和按钮 ...

最新文章

  1. 下列哪个可以选中矩形文字块_PPT很难?一个字母就可以搞定
  2. python: 多线程实现的两种方式及让多条命令并发执行
  3. TopFreeTheme精选免费模板【20130701.特别版】
  4. ae toolbarcontrol运行时没有_想办法让AE跑起来
  5. MySQL系列之E-1------MySQL主从复制原理
  6. Oracle 安装报错 [INS-06101] IP address of localhost could not be determined 解决方法[转]
  7. 从 Angular 移植到 React,代码量减少了 20%
  8. Android MTK TP Driver 触屏驱动
  9. 小甲鱼C语言单链表通讯录作业
  10. docker 之镜像制作dockerfile
  11. C语言状态机模块实现
  12. RMII RGMII MII GMII个人总结
  13. 树莓派做下载机+Web服务器(Aria2下载+yaaw做UI+nginx)
  14. electron最小化托盘、禁用右键菜单
  15. DevOps-SRE岗位到底是什么?
  16. 保龄球计分c语言程序,保龄球的积分计分规则
  17. 本地缓存之王-Caffeine
  18. js 判断是否为 Android IOS IPAD IPHONE 等移动设备访问
  19. 大众中国纯电动战略“水土不服”?理想ONE冲击月销过万目标
  20. 计算机主机房,计算机机房建设组成及划分标准

热门文章

  1. docker-compose文件中设置网络
  2. 基于jsp的银行柜员业务绩效考核系统(含论文
  3. Codesys的软件PLC解决方案
  4. 写给辛劳的父亲------父爱如山
  5. JS判断字符串中是否有全角字符
  6. Microsoft visual studio 2015已停止工作最全解决办法
  7. HuggingGPT进化,一键控制10万多个AI模型
  8. 普通用户登陆linux系统报错 -bash: fork: retry: No child processes
  9. c语言createthread函数,C++中CreateThread函数创建线程的用法和实例
  10. harbor 只读模式修改