yzm10铺地毯 (递归)

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();
    	}
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心脏dance

如果解决了您的疑惑,谢谢打赏呦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值