上海计算机学会2026年1月月赛C++丙组T4 分形十字
分形十字内存限制: 256 Mb时间限制: 1000 ms题目描述给定一个整数 N请打印出一个级别为 N 的分形十字分形十字定义如下0 级分形十字是1 级分形十字是.. ..2 级分形十字是........ ...... ........ ...... ...... ........ ...... ........总结来说当 k0 时k 级分形十字是将五个 k−1 级的分形十字摆放在上、下、左、右、中而四角用 . 填充成一个更大的十字。输入格式单个整数表示N输出格式一个分形十字图案由 和 . 组成的多行字符串数据范围0≤N≤7样例数据输入1输出.. ..分形十字 题解C实现基于给定的C代码以下是分形十字题解的核心逻辑与执行流程解析保留原代码逻辑不做修改。整体设计思想代码采用递归DFS 数组填充的方式实现分形十字核心逻辑如下分形十字的边长为3N3^N3NN为级别因此先计算出总边长m3Nm3^Nm3N用全局二维字符数组存储图案数组大小2200×2200足够覆盖N≤7的场景因为3721873^72187372187递归函数dfs负责填充十字的关键位置先填充中心的子十字再将中心内容复制到上、下、左、右四个方向同时将四角填充为.。#includebits/stdc.husingnamespacestd;// 全局二维字符数组存储分形十字图案// 大小2200×2200因题目N≤73^721872200足够容纳且避免越界chara[2200][2200];/** * 递归填充分形十字的DFS函数 * param s 当前子区域的左上角起始坐标1-based索引 * param x 当前子区域的边长 */voiddfs(ints,intx){// 递归终止条件x1对应0级分形十字仅单个if(x1){// 在当前子区域的中心位置s,s放置a[s][s];return;}// 将当前边长除以3得到下一级子区域的边长x/3;// 递归填充当前区域中心的k-1级分形十字// sx是中心子区域的左上角坐标原区域起始子边长dfs(sx,x);// 遍历中心子区域的所有位置将内容复制到上、下、左、右四个方向// 中心子区域范围行[i]从sx到sxx-1列[j]同理for(intisx;isxx;i){for(intjsx;jsxx;j){// 向上复制当前行向上偏移x行a[i-x][j]a[i][j];// 向下复制当前行向下偏移x行a[ix][j]a[i][j];// 向左复制当前列向左偏移x列a[i][j-x]a[i][j];// 向右复制当前列向右偏移x列a[i][jx]a[i][j];// 填充四角为.保证分形十字的四角无a[i-x][j-x].;// 上左角a[ix][j-x].;// 下左角a[i-x][jx].;// 上右角a[ix][jx].;// 下右角}}}intmain(){// 读取输入的分形级别Nintn;cinn;// 计算分形十字的总边长3^n0级11级32级9...intm1;for(inti1;in;i){m*3;}// 调用DFS函数从整个图案的左上角(1,1)开始填充n级分形十字dfs(1,m);// 遍历二维数组逐行打印分形十字图案for(inti1;im;i){for(intj1;jm;j){couta[i][j];}// 每行打印完后换行cout\n;}return0;}关键变量与函数解析1. 全局数组a[2200][2200]作用存储分形十字的每个位置字符初始时数组值为随机值但递归过程中会覆盖为或.大小2200×2200满足题目中N≤7的最大边长2187需求避免数组越界。2. 递归函数dfs(int s, int x)参数说明s当前子区域的左上角起始坐标代码采用1-based索引即从1开始计数x当前子区域的边长。执行逻辑终止条件0级十字当x1时在当前子区域的中心即坐标(s,s)放置直接返回递归分解将当前边长x除以3得到下一级子区域的边长记为新的x填充中心子十字调用dfs(sx, x)填充当前区域中心的k-1级十字复制中心内容到四向遍历中心子区域的所有位置将每个位置的字符复制到上方a[i-x][j] a[i][j]i-x为当前行向上偏移x行下方a[ix][j] a[i][j]ix为当前行向下偏移x行左方a[i][j-x] a[i][j]j-x为当前列向左偏移x列右方a[i][jx] a[i][j]jx为当前列向右偏移x列填充四角为.将中心子区域四个对角的位置上左、下左、上右、下右设为.保证四角无。3. 主函数main()步骤1读取输入的级别n步骤2计算总边长m通过循环将1乘以3共n次得到m3nm3^nm3n步骤3调用dfs(1, m)从整个图案的左上角坐标1,1开始填充n级十字步骤4双重循环遍历数组逐行打印分形十字图案。样例执行过程输入n1以输入1为例拆解代码执行流程main函数中n1计算m31×3调用dfs(1, 3)x3≠1执行x/3→x1调用dfs(11, 1) dfs(2,1)x1触发终止条件设置a[2][2]返回进入循环i从112到111-12即i2j同理从2到2执行循环内逻辑a[2-1][2] a[2][2]→a[1][2]上方a[21][2] a[2][2]→a[3][2]下方a[2][2-1] a[2][2]→a[2][1]左方a[2][21] a[2][2]→a[2][3]右方四角设为.a[1][1].、a[3][1].、a[1][3].、a[3][3].打印数组第1行a[1][1]a[1][2]a[1][3]→..第2行a[2][1]a[2][2]a[2][3]→第3行a[3][1]a[3][2]a[3][3]→..最终输出与样例一致。总结代码核心是递归分解中心复制将k级十字分解为中心的k-1级十字再复制到四向四角填充.坐标采用1-based索引递归函数的s是子区域起始坐标x是子区域边长数组大小2200×2200适配N≤7的最大边长避免越界递归终止条件对应0级十字的单个。

相关新闻

javaWeb从入门到进阶(SpringBoot原理及bean对象)

javaWeb从入门到进阶(SpringBoot原理及bean对象)

配置优先级: SpringBoot中支持三种格式的配置文件: application.properties-----application.yml------application.yaml 如果三个都配置同一属性端口了,到底哪个配置文件生效? 经过验证:application.properties&g…

2026/5/17 1:31:20 阅读更多 →
Flink 弹性伸缩(Elastic Scaling)Adaptive Scheduler、Reactive Mode 与外部资源声明

Flink 弹性伸缩(Elastic Scaling)Adaptive Scheduler、Reactive Mode 与外部资源声明

1. 弹性伸缩到底解决什么问题? 核心问题不是“能不能调并发”,而是“资源经常不稳定”: 提交时集群 slot 不够:以前要么卡住、要么失败、要么你手动降并发重提运行中 TaskManager 掉线:默认调度器可能触发失败/重启策略…

2026/5/17 1:31:18 阅读更多 →
Java性能优化你真的玩明白了吗?

Java性能优化你真的玩明白了吗?

作为一个程序员,性能优化是常有的事情,不管你是刚入行的小白还是已经入坑了很久的小秃头都会经历很多不同层次的性能优化——小到代码审查大到整个系统设计的优化!大势所趋之下,如何让自己的优化方向精准到性能瓶颈的那个点以及尽…

2026/5/17 1:31:17 阅读更多 →

最新新闻

嵌套 H5 的跨端通信:iOS / Android / 小程序 / 浏览器

嵌套 H5 的跨端通信:iOS / Android / 小程序 / 浏览器

一、为什么要做“统一桥接层”? “Write once, run anywhere” 对于纯展示型 H5 是成立的。但只要涉及到业务交互,比如:调起原生登录、保存图片到相册、修改系统状态栏颜色、分享到朋友圈,浏览器标准的 Web API 根本无能为力。 …

2026/7/3 2:40:31 阅读更多 →
交叉熵损失函数实战指南:原理、陷阱与工业级调优

交叉熵损失函数实战指南:原理、陷阱与工业级调优

1. 项目概述:为什么交叉熵损失函数不是“又一个公式”,而是模型精度的隐形操盘手在机器学习项目里,你调用model.compile(losscategorical_crossentropy)可能只需要0.3秒,但背后这个看似简单的函数,却直接决定了模型是“…

2026/7/3 2:38:31 阅读更多 →
ThreadLocalMap 设计及工作原理

ThreadLocalMap 设计及工作原理

把焦点深入到 ThreadLocalMap 这个核心容器上。它是理解整个 ThreadLocal 机制的关键,也是一个精巧的、为特定场景优化的定制化哈希表。下面我从数据结构、哈希冲突解决、扩容机制和关键操作四个维度,剖析它的设计精髓。1. 数据结构:弱引用的…

2026/7/3 2:36:30 阅读更多 →
Node.js Promise.all 并行查询实战:性能提升与错误处理详解

Node.js Promise.all 并行查询实战:性能提升与错误处理详解

在 Node.js 后端开发中,我们经常需要从多个数据源(如数据库、外部 API、文件系统)并行获取数据。如果采用传统的串行 await 方式,总耗时将是所有异步操作耗时的总和,这在处理高并发或延迟敏感的业务时是无法接受的。…

2026/7/3 2:36:30 阅读更多 →
SpringBoot+MySQL实战:从零搭建企业级后台管理系统

SpringBoot+MySQL实战:从零搭建企业级后台管理系统

1. 先搞清楚这个“新冠物资管理系统”到底能做什么,以及它适合谁看到“新冠物资管理系统”这个标题,很多人第一反应可能是:这会不会是一个过时的、特定时期的项目?实际上,这个基于 SpringBoot 和 MySQL 的项目&#xf…

2026/7/3 2:34:30 阅读更多 →
别再熬夜写论文了!6款AI论文写作工具,一键极速生成超长篇幅!

别再熬夜写论文了!6款AI论文写作工具,一键极速生成超长篇幅!

别再做“学术裁缝”触碰学术不端风险了!本文解析论文写作新范式,介绍AI辅助原创、人机协同深化、全流程合规保障三大核心,并推荐6款免费AI论文工具,覆盖全流程生成、深度对话构思、理工科适配、范文参考、文献检索、学术润色翻译等…

2026/7/3 2:32:30 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻