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

晴天的魔法乐园——谢尔宾斯基地毯(递归打印图形)「建议收藏」题目链接: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在非Activity中使用startActivityForResult

    在非Activity中使用startActivityForResult在开发过程中有时会有需要在非activity中,跳转到另一个activity中,再携带某些值回到先前的页面,我们在很多地方可以拿到context,但这个时候想使用startActivityForResult时却发现无法调用,因为这个方法是Activity下的,而非Context下,这个时候只需要强转一下即可,将获取到的context转成activity就可以使用这个方法了,在我的…

    2022年7月27日
    3
  • 三期_day12_其它+jetty的使用

    三期_day12_其它+jetty的使用

    2022年2月3日
    39
  • go数组与切片,[]byte转string[通俗易懂]

    go数组与切片,[]byte转string[通俗易懂]数组:同一种数据类型的固定长度序列数组的定义:vara[len]int,比如vara[5]int长度是数组类型的一部分,因此,vara[5]int和vara[10]int是不同的类型funcArray(){ //数组的初始化 varage0[5]int=[5]int{1,2,3} varage1=[5]int{1,2,3,4,5} vara…

    2022年6月22日
    60
  • pycharm激活码2021年6月-激活码分享

    (pycharm激活码2021年6月)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSWQi…

    2022年3月21日
    162
  • c语言移位操作

    c语言移位操作

    2021年12月17日
    50
  • latex连乘符号怎么写_latex属于符号怎么打

    latex连乘符号怎么写_latex属于符号怎么打求和符号:\sum_{i=1}^{n}左侧的“\sum”代表求和符号,中间的"_{i=1}"代表下标是“i=1”,右边的"^{n}"代表上标是“n”。 连乘符号:\prod_{i=1}^{n}连乘除了最前面的词不一样,别的都和求和符号一样,下面再说求和符号其他形式。连乘都可以参考 求和符号不加上标\sum_{i=1}求和符号…

    2022年10月12日
    0

发表回复

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

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