题目
题目描述
自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子……你能做到吗?
输入格式
每个数据一个数字,表示图腾的大小(此大小非彼大小) n<=10
输出格式
这个大小的图腾
输入输出样例
输入 #1
2
输出 #1
/ /__ / / /__/__
输入 #2
3
输出 #2
/ /__ / / /__/__ / / /__ /__ / / / / /__/__/__/__
分析
好像我用的不是分治诶 >_<
不过题解里有人用分治。注意字符的细节
(一道普及组的题还没能一次过)
代码
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 int n,MAXN; 6 char a[1 << 12][1 << 12]; 7 8 int Copy(int x,int y,int len){ 9 for(int i = x + len;i < x + len + len; ++ i) 10 for(int j = y - len;j < y + len; ++ j){ 11 a[i][j] = a[i - len][j + len];//i,j不是x,y 12 } 13 14 for(int i = x + len;i < x + len + len; ++ i) 15 for(int j = y + len;j < y + len + len + len; ++ j){ 16 a[i][j] = a[i - len][j - len]; 17 } 18 } 19 20 int main(){ 21 // freopen("2.txt","r",stdin); 22 // freopen("1.txt","w",stdout); 23 //注意注销文件 24 //还是对拍比较靠谱 25 //肉眼看不出来 26 scanf("%d",&n); 27 28 for(int i = 0;i <= (1<<n) + 5;++i) 29 for(int j = 0;j <= (1<<(n + 1)) + 5;++j) 30 a[i][j] = ' '; //高(1<<n),宽(1<<(n + 1)) 31 32 MAXN = ((1 << n)); 33 a[1][MAXN] = '/'; 34 a[1][MAXN + 1] = '\'; 35 a[2][MAXN] = '_'; 36 a[2][MAXN + 1] = '_'; 37 a[2][MAXN - 1] = '/'; 38 a[2][MAXN + 2] = '\';//一个斜杠是转义字符 39 40 for(int i = 1;i < n; ++ i){ 41 int len = (1 << i); 42 Copy(1,MAXN - len + 1,len); 43 } 44 int end = MAXN + 1; 45 for(int i = 1;i <= MAXN ;++ i){ 46 end ++ ; 47 for(int j = 1;j <= end ; ++ j){ 48 putchar(a[i][j]); 49 } 50 putchar(' '); 51 } 52 53 return 0; 54 }