晴天的魔法乐园——谢尔宾斯基地毯(递归打印图形)「建议收藏」

晴天的魔法乐园——谢尔宾斯基地毯(递归打印图形)「建议收藏」题目链接:https://judger.net/problem/1061ProblemDescription谢尔宾斯基地毯是一种分形图案,它的定义如下:令F(n)表示嵌套n层的谢尔宾斯基地毯,那么(下面的“空”均表示空格,仅为示意,实际输出时应仍为空格)当n=1时,F(1)为:空当n=2时,F(2)为:空空空空X空空空空一般地,如果F(n-1)表示嵌…

大家好,又见面了,我是你们的朋友全栈君。

题目链接:https://judger.net/problem/1061

Problem Description

谢尔宾斯基地毯是一种分形图案,它的定义如下:
令F(n)表示嵌套n层的谢尔宾斯基地毯,那么(下面的“空”均表示空格,仅为示意,实际输出时应仍为空格)
当n=1时,F(1)为:

当n=2时,F(2)为:

空空空
空X空
空空空

一般地,如果F(n-1)表示嵌套n-1层的谢尔宾斯基地毯,则F(n)的递归定义如下:

F(n-1)F(n-1)F(n-1)F(n-1)X(n-1)F(n-1)F(n-1)F(n-1)F(n-1)

其中X(n)表示边长为n的正方形,其内部被字符X完全填充。
现在输入一个正整数n,请画出嵌套n层的谢尔宾斯基地毯F(n)。

Input

每个输入文件一组数据。
第一行一个正整数N(N<=7),表示谢尔宾斯基地毯的嵌套层数。

Output

输出嵌套n层的谢尔宾斯基地毯。为了让输出看起来更像地毯,请用加号+将结果完整包裹起来。

Sample Input 1

1

Sample Output 1

+++
+ +
+++

Sample Input 2

2

Sample Output 2

+++++
+   +
+ X +
+   +
+++++

Sample Input 3

3

Sample Output 3

+++++++++++
+         +
+ X  X  X +
+         +
+   XXX   +
+ X XXX X +
+   XXX   +
+         +
+ X  X  X +
+         +
+++++++++++

Sample Input 4

4

Sample Output 4

+++++++++++++++++++++++++++++
+                           +
+ X  X  X  X  X  X  X  X  X +
+                           +
+   XXX      XXX      XXX   +
+ X XXX X  X XXX X  X XXX X +
+   XXX      XXX      XXX   +
+                           +
+ X  X  X  X  X  X  X  X  X +
+                           +
+         XXXXXXXXX         +
+ X  X  X XXXXXXXXX X  X  X +
+         XXXXXXXXX         +
+   XXX   XXXXXXXXX   XXX   +
+ X XXX X XXXXXXXXX X XXX X +
+   XXX   XXXXXXXXX   XXX   +
+         XXXXXXXXX         +
+ X  X  X XXXXXXXXX X  X  X +
+         XXXXXXXXX         +
+                           +
+ X  X  X  X  X  X  X  X  X +
+                           +
+   XXX      XXX      XXX   +
+ X XXX X  X XXX X  X XXX X +
+   XXX      XXX      XXX   +
+                           +
+ X  X  X  X  X  X  X  X  X +
+                           +
+++++++++++++++++++++++++++++

1、分析

递归打印,打印方法同上一篇博客:晴天的魔法乐园——盒分形​,唯一的区别是每次递归的时候有两个打印,即四周的和中央。

2、代码

#include<stdio.h>
#include<math.h>
const int maxn = 800;
char matrix[maxn][maxn];
//坐标 
int X[9] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};
int Y[9] = {-1, -1, -1, 0, 0, 0, 1, 1, 1};

void fill(int n, int x, int y){
	if(n == 1){
		return;
	}else if(n == 2){
		matrix[x][y] = 'X';
		return;
	}
	//画四周图形 
	for(int i = 0; i < 9; i++){
		int newX = x + X[i] * pow(3, n - 2);
		int newY = y + Y[i] * pow(3, n - 2);
		fill(n - 1, newX, newY);
	}
	//画中央图形
	for(int i = 0; i < 9; i++){
		int newX = x + X[i] * pow(3, n - 3);
		int newY = y + Y[i] * pow(3, n - 3);
		fill(n - 1, newX, newY);
	} 
} 

int main(){
	int n;
	scanf("%d", &n);
	fill(n, 400, 400);
	int scale = pow(3, n - 1);
	for(int i = 400 - scale / 2 - 1; i <= 400 + scale/2 + 1; i++){
		for(int j = 400 - scale / 2 - 1; j <= 400 + scale / 2 + 1; j++){
			//打印四周的'+' 
			if(j == 400 - scale / 2 - 1 || j == 400 + scale / 2 + 1 || i == 400 - scale / 2 - 1 || i == 400 + scale / 2 + 1){
				printf("+");
			}else if(matrix[i][j] == 'X'){
				printf("X");
			}else{
				printf(" ");
			}
		}
		printf("\n");
	}
	return 0;
}

原文链接:https://www.qsp.net.cn/art/176.html

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

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

(0)
上一篇 2022年7月13日 下午4:00
下一篇 2022年7月13日 下午4:16


相关推荐

  • python取整的几种方法_Python取整的方法

    python取整的几种方法_Python取整的方法一 向零取整 int python 自带的 int 取整 gt gt gt int 1 2 1 gt gt gt int 2 8 2 gt gt gt int 0 1 0 gt gt gt int 5 6 5 总结 int 函数是 向 0 取整 取整方向总是让结果比小数的绝对值更小二 向上取整 math ceil gt gt gt importmath gt

    2026年3月19日
    2
  • Linux安装maven并配置

    Linux安装maven并配置目录 1 下载 maven 压缩包 2 解压 3 更改配置 4 修改环境变量 5 加载环境变量 6 检验是否配置成功 1 下载 maven 压缩包官网地址 https maven apache org download cgi 点击 复制这个地址 然后执行命令 获取安装包 wgethttp mirror bit edu cn apache maven maven 3 3 6 3 binaries

    2026年3月26日
    2
  • 请简要描述在定点DSP处理器上实现浮点运算的基本步骤_74ls161分频器

    请简要描述在定点DSP处理器上实现浮点运算的基本步骤_74ls161分频器 http://bbs.elecfans.com/jishu_486119_1_1.html   7.1  定点数和浮点数概念   如果小数点的位置事先已有约定,不再改变,此类数称为“定点数”。相比之下,如果小数点的位置可变,则称为“浮点数”(定点数的本质是小数,整数只是其表现形式)。 7.1.1  定点数 …

    2025年9月29日
    7
  • How AHI Fintech and DataVisor are Securing Data through AI and Big Data

    How AHI Fintech and DataVisor are Securing Data through AI and Big Data

    2022年4月2日
    51
  • Kafka和Mq对比

    Kafka和Mq对比其实 作为消息队列来说 企业中选择 mq 的还是多数 因为像 Rabbit Rocket 等 mq 中间件都属于很成熟的产品 性能一般但可靠性较强 而 kafka 原本设计的初衷是日志统计分析 现在基于大数据的背景下也可以做运营数据的分析统计 而 redis 的主要场景是内存数据库 作为消息队列来说可靠性太差 而且速度太依赖网络 IO 在服务器本机上的速度较快 且容易出现数据堆积的问题 在比较轻量的场合下能够适用 Ra

    2026年3月19日
    2
  • ,试着写一些东西为自己的程序猿!

    ,试着写一些东西为自己的程序猿!

    2022年1月13日
    42

发表回复

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

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