南蛮图腾
题目链接:http://acm.ocrosoft.com/problem.php?cid=1634&pid=4
题目描述
自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果(看Hint),在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子……你能做到吗?
输入
每个数据一个数字,表示图腾的大小(此大小非彼大小) n< =10
输出
这个大小的图腾
样例输入
2
样例输出
/\
/__\
/\ /\
/__\/__\
思路:图形打印问题,输出的图形是一个类似于杨辉三角奇偶的三角图形,是个递归图形。要注意将数组置空格,否则会wa(血与泪的教训)。代码:
#include<stdio.h>
#include<math.h>
char a[2000][3000]={0};
int main()
{
int n;
scanf("%d",&n);
int kong = (int)(pow(2,n)-1);
int ggg = (int)(pow(2,n));
//初始化数组
for(int i = 1; i <= 1024; i++)
{
for(int j = 1; j <= 2048; j++)
a[i][j]=' ';
}
a[1][1]='/';
a[1][2]='\\';
a[2][1]='/';
a[2][2]='_';
a[2][3]='_';
a[2][4]='\\';
//将去掉前置空格后的图形存入a数组
//i循环是一个反向递归的过程
for(int i = 2; i <= n; i++)
{
int kk = (int)(pow(2,i-1));
int kkk=kk*2;
//每次从第一排到第kk排进行复制
for(int j=1; j <= kk;j++)
{
//每次复制两个地方
for(int k = 1; k <= kkk; k++)
{
a[j+kk][k]=a[j][k];
a[j+kk][k+kkk]=a[j][k];
}
}
}
//gg用于控制后置0
int gg = 2;
//输出过程
for(int i = 1; i <= ggg;i++)
{
//输出前导0
for(int k = 1; k <= kong; k++)
printf(" ");
kong--;
//输出每一排的内容
for(int j = 1; j <= gg;j++)
printf("%c",a[i][j]);
gg=gg+2;
printf("\n");
}
return 0;
}