P1498 南蛮图腾

20 篇文章 4 订阅

题目描述

自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子……你能做到吗?

输入格式

每个数据一个数字,表示图腾的大小(此大小非彼大小) n<=10

输出格式

这个大小的图腾

输入输出样例

输入 #1复制

2

输出 #1复制

   /\
  /__\
 /\  /\
/__\/__\

输入 #2复制

3

输出 #2复制

       /\
      /__\
     /\  /\
    /__\/__\
   /\      /\
  /__\    /__\
 /\  /\  /\  /\
/__\/__\/__\/__\

思路:我是靠dalao的题解才读懂题目的,,,刚开始是这个图形:

 /\
/__\

每复制一次就向上向右复制一下自己本身,比如n=2时:

   /\
  /__\
 /\  /\
/__\/__\

n=3时,再吧上面那个图形向上向右复制一次:

       /\
      /__\
     /\  /\
    /__\/__\
   /\      /\
  /__\    /__\
 /\  /\  /\  /\
/__\/__\/__\/__\

 每次复制的时候高度和宽度*2,如果我们按正常存储按顺序输出的话要把原来的图形再向下平移啥的很麻烦,所以我们考虑倒序着存倒序着输出。

先把图形初始化为全是空格。

把最小的图形倒着存入:

/__\
 /\

 循环n-1次,每次向左向右输出然后复制的高度加倍,代码实现是:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

char g[10005][10005];
int n;
int main(){
	cin>>n;
	memset(g,' ',sizeof g);//注意要先把图形全初始化为空格
	g[0][0]='/';
	g[0][1]='_';
	g[0][2]='_';
	g[0][3]='\\';//注意反斜线不能直接存,要加斜线
	g[1][1]='/';
	g[1][2]='\\';
	int wide=4;//最初的图形的宽度是4
	for(int k=1;k<n;k++){//复制n-1次
		for(int i=0;i<wide/2;i++){//高度是wide/2
			for(int j=0;j<wide;j++){//宽度是wide
				g[i][j+wide]=g[i][j];//向右复制
				g[i+wide/2][j+wide/2]=g[i][j];//向下复制
			}
		}
		wide*=2;//每次复制之后宽度成倍增加
	}
	for(int i=wide/2-1;i>=0;i--){//当宽度为wide时他最下面的一行是wide-1,但是出循环的时候wide多*2,所以我们先/2再-1
		for(int j=0;j<wide;j++){
			printf("%c",g[i][j]);
		}
		printf("\n");
	}
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值