目录
原题描述:
时间限制: 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时,图腾有几个三角形?