题目链接: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;

}