南蛮图腾的题解

目录

原题描述:

题目描述

输入格式

输出格式

样例

Input 1

Output 1

Input 2

Output 2

 Input 3

 Output 3

样例解释

数据范围

主要思路:

ACCode:

作者的灵魂拷问:


原题描述:

时间限制: 1000ms

空间限制: 524288kB

题目描述

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

输入格式

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

输出格式

这个大小的图腾

样例

Input 1
2
Output 1
   /\
  /__\
 /\  /\
/__\/__\
Input 2
3

Output 2
       /\
      /__\
     /\  /\
    /__\/__\
   /\      /\
  /__\    /__\
 /\  /\  /\  /\
/__\/__\/__\/__\
 Input 3
4
 Output 3
               /\
              /__\
             /\  /\
            /__\/__\
           /\      /\
          /__\    /__\
         /\  /\  /\  /\
        /__\/__\/__\/__\
       /\              /\
      /__\            /__\
     /\  /\          /\  /\
    /__\/__\        /__\/__\
   /\      /\      /\      /\
  /__\    /__\    /__\    /__\
 /\  /\  /\  /\  /\  /\  /\  /\
/__\/__\/__\/__\/__\/__\/__\/__\

样例解释

样例1解释:大小为2的图腾

样例2解释:大小为3的图腾

数据范围

1<=n<=10

主要思路:

本题有两种做法:

1.自己推,把十种都推出来

2.算,找规律。

有人想用递归做,但无从下手。

我们可以到着来,用矩形存储整个图腾。

初始化:

int w=4;//初始宽
memset(a,' ',sizeof(a));//要变成空格
a[1][1] = '\\';
a[1][2] = '_';
a[1][3] = '_';
a[1][4] = '/';
a[2][2] = '\\';
a[2][3] = '/';

用图解释:

怎样,字是不是很好看。

发现了吗,是倒着的n=1的图腾

接下来就是复制了。

最多复制n-1次

发现了吗:h是w/2,就像上图,w=4,h=2;

a[i+h][j+h]=a[i][j];
a[i][j+w] = a[i][j];

看图:

全部平移好后:
 

还有向上平移:

看,是不是就是n=2的图腾了?

最后,w要*=2;

要倒着输出。

ACCode:

#include<bits/stdc++.h>
using namespace std;
int n;
char a[10010][10010];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	n--;//n-1次复制
	int w=4;
	memset(a,' ',sizeof(a));//初始化
	a[1][1] = '\\';
	a[1][2] = '_';
	a[1][3] = '_';
	a[1][4] = '/';
//	a[2][1] = ' ';
	a[2][2] = '\\';
	a[2][3] = '/';
//	a[2][4] = ' ';
	for(int step=1;step<=n;step++)
	{
		int h=w/2;
		for(int i=1;i<=h;i++)
		{
			for(int j=1;j<=w;j++)
			{
				a[i][j+w] = a[i][j];
				a[i+h][j+h] = a[i][j];//复制
			}
		}
		w *= 2;
	}
	for(int i=w/2;i>=1;i--)//倒着输出
	{
		for(int j=w;j>=1;j--)
		{
			cout<<a[i][j];
		}
		cout<<'\n';
	}
	return 0;
}

作者的灵魂拷问:

注意看:n=6时,图腾有几个三角形?

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值