分形 递归打印之神奇三角形

上次做过几乎一样的题吐舌头,然而到校赛上就懵逼了哭.特发此博客,以此哀悼委屈

题意是打印三角形,且最后无空格

上代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define MAX 3010
char maps[MAX][MAX];


void print(int n, int x, int y)
{
    if(n==1)
    {
        maps[x][y+1]=maps[x+1][y]=maps[x+1][y+2]='O';
        return ;
    }
    else
    {
        int m = pow(2, n-1);       //选择上次分形度(n-1)   m为高, 2*m为宽;
        print(n-1, x, y+m);
        print(n-1, x+m, y);
        print(n-1, x+m, y+2*m);
    }
}

int main()
{
    int t;
    scanf("%d", &t);
    for(int i=0; i<t; i++)
    {
        int n;
        memset(maps, ' ', sizeof(maps));    //初始化为空格
        scanf("%d", &n);
        int m=pow(2, n);      //选择此次分形度
        print(n, 0, 0);
        for(int i=0; i<m; i++)
        for(int j=2*m-1; j>=0; j--){
             if(maps[i][j-1]=='O')
             {maps[i][j]='\0'; break;}      //倒序查找  设置'\0';
        }
        for(int i=0; i<m; i++)
        {
            printf("%s\n", maps[i]);
        }
    }
}


版权声明:本文为icodeajk原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。