题目描述
自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子……你能做到吗?
输入输出格式
输入格式:每个数据一个数字,表示图腾的大小(此大小非彼大小) n<=10
输出格式:这个大小的图腾
参考题解:https://www.luogu.org/blog/cpp/solution-p1498
用一个a【1024】【2048】的字符数组存储图形。注意‘\’应该写为'\\'。倒置存储图形。
a[0][0] = a[1][1] = '/'; a[0][1] = a[0][2] = '_'; a[0][3] = a[1][2] = '\\';这是n=1时的图腾。倒置的,不明白可以在数组中画一画。
然后将n=1时的图形向右复制和向下复制。这样得到n=2时的图形,同样是倒置的。
然后依次往下做就好了。题解中的复制图形那个公式 真的太巧妙了。佩服。
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
char a[1024][2048];
int n;
int main()
{
cin >> n;
for (int i = 0; i < 1024;i++)
for (int j = 0; j < 2048; j++)
a[i][j] = ' ';
int k = 1, length = 4;
a[0][0] = a[1][1] = '/'; a[0][1] = a[0][2] = '_'; a[0][3] = a[1][2] = '\\';
while (k < n)
{
for (int i = 0; i < length / 2;i++)
for (int j = 0; j < length; j++)
a[i + length / 2][j + length / 2] = a[i][j + length] = a[i][j];
length *= 2; k++;
}
for (int i = (length / 2) - 1; i >= 0; i--)
{
for (int j = 0; j < length; j++)
cout << a[i][j];
cout << '\n';
}
return 0;
}