OJ_重复者

题干




C++实现

cpp 复制代码
#include <stdio.h>
#include <string.h>
using namespace std;
void square(int curSize, int patSize, char pattern[3000][3000], char picture[3000][3000], char last[3000][3000]) {
	if (curSize == 1) {
		for (int i = 0; i < patSize; ++i) {
			for (int j = 0; j < patSize; ++j) {
				picture[i][j] = pattern[i][j];
			}
		}
	} else {
		// 根据模板的字符是否为空格进行分形处理

		for (int i = 0; i < patSize; ++i) {
			for (int j = 0; j < patSize; ++j) {
				if (pattern[i][j] == ' ') {
					for (int pi = i * curSize; pi < i * curSize + curSize; ++pi) {
						for (int pj = j * curSize; pj < j * curSize + curSize; ++pj) {
							picture[pi][pj] = ' ';
						}
					}
				} else {
					// 这里需要建立新图案和模板的下标映射关系
					for (int pi = i * curSize; pi < i * curSize + curSize; ++pi) {
						for (int pj = j * curSize; pj < j * curSize + curSize; ++pj) {
							picture[pi][pj] = last[pi - i * curSize][pj - j * curSize];
						}
					}

				}
			}
		}
	}

	for (int i = 0; i < curSize * patSize; ++i) {
		for (int j = 0; j < curSize * patSize; ++j) {
			last[i][j] = picture[i][j];
		}
	}
}
// 数组的大小为 3000*3000 约9MB,超过了1MB的限制,所以这里设成全局变量
char pattern[3000][3000];
char last[3000][3000];
char picture[3000][3000];

int main() {
	int N;//模板的尺寸大小为 N*N
	int Q;//表示所求的图形等级

	while (1) {
		scanf("%d", &N);
		if (N == 0) {
			break;
		}
		getchar(); // fgets会读到'\n' 所以先去掉
		for (int i = 0; i < N; ++i) {
			fgets(pattern[i], 3000, stdin);
			int curLength = strlen(pattern[i]);
			for (int j = curLength - 1; j < N; ++j) {
				pattern[i][j] = ' ';
			}
		}
		scanf("%d", &Q);
		int curSize = 1;
		
		// 逐渐分形操作
		for (int i = 0; i < Q; ++i) {
			square(curSize, N, pattern, picture, last);
			curSize *= N;
		}

		for (int i = 0; i < curSize; ++i) {
			for (int j = 0; j < curSize; ++j) {
				printf("%c", picture[i][j]);
			}
			printf("\n");
		}

	}
}
相关推荐
源远流长jerry11 分钟前
OpenHarmony概述与使用
c语言·c++·鸿蒙系统
艾莉丝努力练剑13 分钟前
深入详解C语言的循环结构:while循环、do-while循环、for循环,结合实例,讲透C语言的循环结构
c语言·开发语言·c++·学习
一株月见草哇43 分钟前
Matlab(4)
人工智能·算法·matlab
hans汉斯1 小时前
基于深度学习的苹果品质智能检测算法研究
人工智能·深度学习·算法
火车叨位去19491 小时前
力扣top100(day01-05)--矩阵
算法·leetcode·矩阵
mit6.8241 小时前
[Robotics_py] 机器人运动模型 | `update`函数 | 微积分&矩阵
人工智能·python·算法
晨非辰1 小时前
#C语言——学习攻略:自定义类型路线--结构体--结构体类型,结构体变量的创建和初始化,结构体内存对齐,结构体传参,结构体实现位段
c语言·开发语言·经验分享·学习·其他·学习方法·visual studio
·白小白2 小时前
【数据结构】——栈(Stack)的原理与实现
c语言·开发语言·数据结构
地平线开发者3 小时前
征程 6 | 自定义查表算子实现量化部署
算法·自动驾驶
KFCgrandpahhh4 小时前
从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.13
linux·c语言·学习