校赛E题递归形式

#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long ll;
char g[6666][6666];
int k[]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096};
void draw(int x,int y,int d)
{
    if(d==1)
    {
        g[x][y+1]='o';
        g[x+1][y]='o';
        g[x+1][y+2]='o';
        return ;
    }
    draw(x,y+k[d],d-1);
    draw(x+k[d],y,d-1);
    draw(x+k[d],y+k[d]+k[d],d-1);
}
int main()
{
    int cas;
    scanf("%d",&cas);
    while(cas--)
    {
        int n;
        scanf("%d",&n);
        if(n==0)
        {
            puts("o");
            continue;
        }
        memset(g,' ',sizeof(g));
        draw(1,1,n);
        for(int i=1;i<=k[n+1];i++)
        {
            for(int j=k[n+2]-1;j>=1;j--)
            {
                
                if(g[i][j]==' ')
                    g[i][j]=0;
                else
                    break;
            }
        }
        for(int i=1;i<=k[n+1];i++)
        {
            for(int j=1;j<=k[n+1]+i-1;j++)
            {
                printf("%c",g[i][j]);
            }
            puts("");
        }
        printf("
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/13224ACMer/p/5337679.html