1629: yzm10铺地毯

时间限制: 2 Sec  内存限制: 64 MB
提交: 31  解决: 12
[提交] [状态] [讨论版] [命题人:201540704024]

题目描述

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

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

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

 

 

输入

一个正整数n

 

输出

打印图案

 

样例输入

输入样例1:
1

输入样例2:
2

输入样例3:
3

 

样例输出

输出样例1:

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

输出样例2:

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

输出样例3:

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

 

提示

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

注意:相似的图形,可以找到规律,用递归打印~~

题意:不解释~~

题解:简单递归,不知道为啥递归一直学的不好,气死了,这个题就是找到规律来做,规律就是从中间向8个方向递归下去,因为是相似的形状,最后注意递归出口就好了,上代码:

import java.util.*;
import java.math.*;
public class Main {
    static Scanner cin = new Scanner(System.in);
    static int [][] a = new int [250][250];
    static int [] p = new int [7];
    static void init() {
    	p[0]=1;
    	for (int i = 1; i < 6;i++) {
    		p[i]=p[i-1]*3;
    	}
    }
    static void dfs(int x,int y,int z) {
    	if(z==0) return;//递归出口
    	for (int i = x-z/2; i <= x+z/2;i++) {
    		for (int j = y-z/2;j <= y+z/2;j++) {
    			a[i][j]=1;//标记空白,想一下就知道为什么,不好解释~~~
    		}
    	}
    	dfs(x-z,y,z/3);dfs(x+z,y,z/3);//8个方向
    	dfs(x,y-z,z/3);dfs(x,y+z,z/3);
    	dfs(x-z,y-z,z/3);dfs(x+z,y+z,z/3);
    	dfs(x-z,y+z,z/3);dfs(x+z,y-z,z/3);
    }
    public static void main(String[] args){
    	init();
    	int n=cin.nextInt();
    	dfs(p[n]/2+1,p[n]/2+1,p[n-1]);
    	for (int i = 1; i <= p[n];i++) {
    		for (int j = 1; j <= p[n];j++) {
    			if(a[i][j]==1) System.out.print("  ");
    			else System.out.print("##");
    		}
    		System.out.println();
    	}
    }
}