1、链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2291

2、解法:递归调用 n-1的图形去打印 n 。

      如图所示,依靠相对坐标去打印C

    分形递归打印 hrbust 2291

3、代码

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;

char a[2200][2200];

int powlen(int x , int n)
{
    int s = 1;
    for(int i = 0 ; i < n; i++)
    {
        s *= x;
    }
    return s;
}
void Print(int n , int x , int y)
{
    if(n == 0)
    {
        a[x][y] = 'C';
        return ;
    }
    int len = pow(3,n-1);
    Print(n-1, x+len, y);
    Print(n-1, x+2*len,y);
    Print(n-1, x, y+len);
    Print(n-1, x+len, y+2*len);
    Print(n-1, x+2*len,y+2*len);
}

int main()
{
    int t , n;
    scanf("%d",&t);
    while(t--)
    {
        memset(a,' ',sizeof(a));
        scanf("%d",&n);

        int len = powlen(3,n);

        Print(n,1,1);

        for(int i = 1; i <= len; i++)
        {
            int sum;
            for(int j = 1; j <= len; j++) 
            {
                if(a[j][i] == 'C') //处理多余的空格
                {
                    sum = j;
                }
            }

            for(int j = 1 ;j <=sum; j++)
            {
                printf("%c",a[j][i]);
            }
            printf("\n");
        }


    }

    return 0;
}

 

相关文章: