https://www.acwing.com/problem/content/120/
先画出最大的图形,之后根据输入n来输出部分
通过递归画,递归到1层时先操作,之后找到递归到n-1层,用n-1层画n层在这里插入代码片

#include<iostream>
using namespace std;
const int N=1010;
char g[N][N];

void dfs(int n){
  //  cout<<nnn++<<endl;
    if (n == 1)
    {
        g[0][0] = 'X';
        return;
    }
    dfs(n-1);
    int len = 1;
    for (int i = 0; i < n - 2; i ++ ) len *= 3;
    int sx[4] = {0, 1, 2, 2}, sy[4] = {2, 1, 0, 2};
    for (int k = 0; k < 4; k ++ )
        for (int i = 0; i < len; i ++ )
            for (int j = 0; j < len; j ++ )
                g[sx[k] * len + i][sy[k] * len + j] = g[i][j];
}
int main(){
    dfs(7);
    int n;
    while(cin>>n,n!=-1){
        int k=1;
        while(--n) k*=3;
        for(int i=0;i<k;i++){
            for(int j=0;j<k;j++){
                if(g[i][j]) cout<<g[i][j];
                else cout<<' ';
            }
            cout<<endl;
        }
        cout<<'-'<<endl;
    }
    return 0;
}
 posted on 2019-07-24 20:25  谁是凶手1703  阅读(58)  评论(0)    收藏  举报