题目描述

继yzm10铺瓷砖后,我们又收到了一项重要的任务,Consumer要求yzm10在光滑的地面上再铺设一层地毯,并且邀请您进行设计。挑剔的Consumer选择了如(图片)所示图案。

谢尔宾斯基地毯:采用的是正方形进行分形构造,谢尔宾斯基地毯和它本身的一部分完全相似,因此具有自相似性。其三维结构便是著名的门格尔海绵。

yzm10给出了地毯的构造层数(n<6),现在请您进行设计。

 

 

输入

一个正整数n

 

输出

打印图案

 

样例输入

输入样例1:
1

输入样例2:
2

输入样例3:
3

 

样例输出

输出样例1:

######
##  ##
######

输出样例2:

##################
##  ####  ####  ##
##################
######      ######
##  ##      ##  ##
######      ######
##################
##  ####  ####  ##
##################

输出样例3:

######################################################
##  ####  ####  ####  ####  ####  ####  ####  ####  ##
######################################################
######      ############      ############      ######
##  ##      ##  ####  ##      ##  ####  ##      ##  ##
######      ############      ############      ######
######################################################
##  ####  ####  ####  ####  ####  ####  ####  ####  ##
######################################################
##################                  ##################
##  ####  ####  ##                  ##  ####  ####  ##
##################                  ##################
######      ######                  ######      ######
##  ##      ##  ##                  ##  ##      ##  ##
######      ######                  ######      ######
##################                  ##################
##  ####  ####  ##                  ##  ####  ####  ##
##################                  ##################
######################################################
##  ####  ####  ####  ####  ####  ####  ####  ####  ##
######################################################
######      ############      ############      ######
##  ##      ##  ####  ##      ##  ####  ##      ##  ##
######      ############      ############      ######
######################################################
##  ####  ####  ####  ####  ####  ####  ####  ####  ##
######################################################

 

提示

为保证打印图案尽可能接近正方形,将"##"视作一个字符。行首行尾没有多余空格。

 

#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std; 
bool c[250][250];
void dfs(int x,int y,int s){//中心坐标,边长 
	if(s==0) return ;
	for(int i=x-s/2;i<=x+s/2;i++){
		for(int j=y-s/2;j<=y+s/2;j++){
			c[i][j]=true;
		}
	}
	dfs(x-s,y-s,s/3);dfs(x,y+s,s/3);
	dfs(x+s,y+s,s/3);dfs(x+s,y,s/3);
	dfs(x+s,y-s,s/3);dfs(x,y-s,s/3);
	dfs(x-s,y+s,s/3);dfs(x-s,y,s/3);
}
int main(){
	int n;
	scanf("%d",&n);
	int m=(int)pow(3,n);//图形的边长 
	dfs(m/2+1,m/2+1,m/3);//标记图形中间的空格 
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			if(c[i][j]) printf("  ");
			else  printf("##");
		}
		printf("\n"); 
	}
	return 0;
}