当前位置: 首页 > news >正文

206. 2013年蓝桥杯省赛 - 打印十字图(困难)- 模拟

206. 打印十字图(模拟)

1. 2013年蓝桥杯省赛 - 打印十字图(困难)

标签:2013 模拟 省赛

1.1 题目描述

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见下图)

img

对方同时也需要在电脑 dos 窗口中以字符的形式输出该标志,并能任意控制层数。

为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。

1.2 输入描述

输入一个正整数 n (n < 30)n (n < 30) 表示要求打印图形的层数。

1.3 输出描述

输出对应包围层数的该标志。

1.4 输入输出样例

示例:

输入

1

输出

..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..

1.5 运行限制

  • 最大运行时间:1s
  • 最大运行内存: 64M

2. 算法设计思路

2.1 图案构造逻辑

在这里插入图片描述

观察例图,我们会发现整个图案是 中心对称 的(即上下左右对称)。因此,我们只需要 构造左上角图案的一部分(第二象限),其余部分通过对称复制生成。

在这里插入图片描述

我们将整个图案看作是一个正方形的二维数组,其大小为 a × a,其中:
a = 2 n + 3 a = 2n + 3 a=2n+3

2.2 使用二维列表模拟图案(字符画)

在这里插入图片描述

由上图可知,我们可将这个图案拆为三部分:横线三角形竖线三角形对角线,代码如下所示。

# 开始绘图
for i in range(0, a, 2):# 画横线dp[i][i + 2:a] = ['$'] * (a - i - 2)# 画竖线for j in range(i + 2, a):dp[j][i] = '$'# 画对角线if i != 0:dp[i][i - 1] = dp[i][i] = dp[i - 1][i] = '$'

2.3 图案镜像复制

利用对称性:

  • 上半部分通过将每一行左半 + 右半逆序拼接;

在这里插入图片描述

  • 下半部分是上半部分的镜像,直接倒序输出即可。

在这里插入图片描述


3. 代码实现

n = int(input())# 先画第二象限
# 生成完整十字图的1/2边长
a = n * 2 + 3
# 生成底图
dp = [['.'] * a for _ in range(a)]# 开始绘图
for i in range(0, a, 2):# 画横线dp[i][i + 2:a] = ['$'] * (a - i - 2)# 画竖线for j in range(i + 2, a):dp[j][i] = '$'# 画对角线if i != 0:dp[i][i - 1] = dp[i][i] = dp[i - 1][i] = '$'# 输出上半部分(包括x轴)
for s in dp:print(''.join(s + s[a - 2::-1]))# 输出下半部分
for s in dp[a - 2::-1]:print(''.join(s + s[a - 2::-1]))

4. 复杂度分析

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2),因为我们绘制一个约为 4 n 2 4n^2 4n2 大小的图案矩阵。
  • 空间复杂度: O ( n 2 ) O(n^2) O(n2),用于二维字符数组的存储。
http://www.xdnf.cn/news/968455.html

相关文章:

  • 第三章支线五 ·组件之城 · 构建与复用的魔法工坊
  • 基于数字孪生的水厂可视化平台建设:架构与实践
  • nsight system分析LLM注意事项
  • PI数据库全面解析:原理、应用、行业案例与优劣对比
  • MySQL学习之触发器
  • Oracle实用参考(13)——Oracle for Linux ASM+RAC环境搭建(1)
  • 【AI News | 20250610】每日AI进展
  • 2.Vue编写一个app
  • Python实例题:Python计算实变函数
  • python打卡第50天
  • 题单:二分查找(==x个数)
  • 纯血Harmony NETX 5 打造趣味五子棋:(附源文件)
  • win11本地Docker部署腾讯云Docker部署若依前后端分离版
  • 解析 Go 语言中 time 包在实现定时任务时的易错点
  • Zustand 状态管理库:极简而强大的解决方案
  • c++中cout的用法 标准输出流cout使用指南
  • Linux操作系统之文件系统上
  • 编程风格良好的条件比较语句
  • 基于NOMP和降维字典的杂波空时功率谱稀疏恢复算法matlab仿真
  • PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
  • 解决helm Doris重启后由于root密码修改导致加入集群不成功的问题
  • python数据结构和算法(3)
  • 智慧医疗能源事业线深度画像分析(上)
  • 项目四.高可用集群_ansible
  • 【OSG学习笔记】Day 18: 碰撞检测与物理交互
  • opencv RGB图像转灰度图
  • yolo11-seg 推理测试infer
  • Java正则表达式:贪婪、懒惰与独占模式解析
  • Tunna工具实战:基于HTTP隧道的RDP端口转发技术
  • java 数据结构-HashMap