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

python数据结构与算法40题_Python数据结构与算法40:递归编程练习题3:ASCII谢尔宾斯基地毯…注 本文如涉及到代码 均经过 Python3 7 实际运行检验 保证其严谨性 本文阅读时间约为 7 分钟 递归编程练习题 3 ASCII 谢尔宾斯基地毯谢尔宾斯基地毯谢尔宾斯基地毯是形如上图的正方形分形图案 每个地毯可分为等大小的 9 份 其中中央挖空 其余均由更小的地毯组成 现给定地毯大小 行数 与组成地毯的字符元素 请打印相应的地毯图形 注 空腔以半角空格表示 当给定字符元素长度不为 1 时空格数须与字符长度对

注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性。

本文阅读时间约为7分钟。

递归编程练习题3:ASCII谢尔宾斯基地毯

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

谢尔宾斯基地毯

谢尔宾斯基地毯是形如上图的正方形分形图案,每个地毯可分为等大小的9份,其中中央挖空,其余均由更小的地毯组成。

现给定地毯大小(行数)与组成地毯的字符元素,请打印相应的地毯图形。

注:空腔以半角空格表示;当给定字符元素长度不为1时空格数须与字符长度对应。

输入格式:

输入为两行,分别为地毯的边长,即组成地毯的元素的个数——正整数N,以及组成地毯的元素——字符串c。

输入数据保证N为3的正整数幂。

输出格式:

由N行长度为N*len(c)的字符串构成的谢尔宾斯基地毯。

输入样例:

9

[]

输出样例:

[][][][][][][][][]

[] [][] [][] []

[][][][][][][][][]

[][][] [][][]

[] [] [] []

[][][] [][][]

[][][][][][][][][]

[] [][] [][] []

[][][][][][][][][]

参考程序模板:

def carpet(N,char):

# code here

pass

n=int(input())

c=input()

carpet(n,c)

解答:这里主要是用递归解决问题。关键在于对于一个最小的条件来说,哪里填充空格符(即挖空),哪里填充字符串c。

我们可以通过设定坐标系及坐标(x, y)一样的东西来精准控制何处该填充空格符还是字符串c。

拿下面最简单的一个3 * 3的谢尔宾斯基地毯来说,坐标(x, y)可以精确表示途中任意一处。例如当x = 0,y = 0时,即坐标(0, 0)表示左上角第一个'[]’,而坐标(1, 1)则表示谢尔宾斯基地毯挖空的那个部分,也就是填充了空格符的那一个位置。

[][][]

[] []

[][][]

那么,如何在程序中实现(x, y)坐标的模拟呢?双重for循环就是我们要找的工具:

for x in range(N):

for y in range(N):

最后,别忘了换行符’\n’的使用。

参考代码及详细注释如下:

def carpet(N, c):

# 以x,y为坐标点,来判断什么坐标位置填充字符串c以及什么位置填充空格符(即挖空)。

def judge(n, x, y):

if n == 1:

return True # 符合True条件的(x, y)坐标点填充字符串c。

n1 = n // 3

if n1 <= x < n1 * 2 and n1 <= y < n1 * 2:

return False # 符合False条件的(x, y)坐标点填充空格符。

return judge(n1, x % n1, y % n1) # 递归继续判断,直到满足基本结束条件为止。

d = ” # 创建一个变量d,用来展示最后完成的谢尔宾斯基地毯。字符串形式。

for x in range(N):

for y in range(N):

if judge(N, x, y):

d += c

else:

d += (len(c) * ‘ ‘)

d = d + ‘\n’ # 这里有个换行符。

return d

N = int(input())

c = input()

print(carpet(N, c))

<<<

9

()

()()()()()()()()()

() ()() ()() ()

()()()()()()()()()

()()() ()()()

() () () ()

()()() ()()()

()()()()()()()()()

() ()() ()() ()

()()()()()()()()()

<<<

To be continued.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221976.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:51
下一篇 2026年3月17日 下午4:51


相关推荐

  • 智谱官宣开源新模型Z1,并行科技全面接入

    智谱官宣开源新模型Z1,并行科技全面接入

    2026年3月12日
    3
  • SGU 319 Kalevich Strikes Back(线段树扫描线)

    SGU 319 Kalevich Strikes Back(线段树扫描线)

    2021年12月4日
    45
  • java中级项目案例_60个Java练手项目案例,看了让你茅塞顿开~

    java中级项目案例_60个Java练手项目案例,看了让你茅塞顿开~给大家推荐一条由浅入深的JAVA学习路径,首先完成Java基础、JDK、JDBC、正则表达式等基础实验,然后进阶到J2SE和SSH框架学习。最后再通过有趣的练手项目进行巩固。JAVA基础Java编程语言(新版)2.Java进阶之设计模式3.JDK核心API4.MySQL基础课程5.正则表达式基础6.JDBC入门教程J2SE&SSH框架7.Java函数式编…

    2022年7月7日
    32
  • 数仓建模与分析建模_数据仓库建模与数据挖掘建模

    数仓建模与分析建模_数据仓库建模与数据挖掘建模1.数仓概述数据仓库:数据仓库是一个面向主题的、集成的、非易失的、随时间变化的数据集合。重要用于组织积累的历史数据,并且使用分析方法(OLAP、数据分析)进行分析整理,进而辅助决策,为管理者、企业系统提供数据支持,构建商业智能。面向主题:为数据分析提供服务,根据主题将原始数据集合在一起。集成的:原始数据来源于不同的数据源,要整合成最终数据,需要经过ETL(抽取、清洗、转换)的过程。非易失:保存的数据是一系列历史快照,不允许被修改,只允许通过工具进行查询、分析。时变性:数仓会定期接收、集成新的

    2026年2月21日
    5
  • 在VSCode中使用Claude Code for VS Code接入星流平台模型API服务教程

    在VSCode中使用Claude Code for VS Code接入星流平台模型API服务教程

    2026年3月16日
    3
  • C++ 变量名命名规则

    C++ 变量名命名规则C 提倡有一定含义的变量名 如果变量表示差旅费 应将其命名为 cost of trip 或 costOfTrip 而不是将其命名为 x 或 cot 必须遵循几种简单的 C 命名规则 1 在名称中只能使用字母字符 数字和下划线 2 名称的第一个字符不能是数字 3 区分大写字符与小写字符 4 不能将 C 关键字用作名称 5 以两个下划线或下划线和大写字母打头的名称被保留给实现 编译器及其使用的资源 使用 以一个下划线开头的名称被保留给实现 用作全局标识符 6 C 对于名称的长度没有限制 名称中所有的字符都

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号