1 条题解

  • 0
    @ 2026-9-30 12:42:51

    C++ :

    
    #include <cstdio>
    #include <cstring>
    /* n<=7 -> 边长 3^6 = 729,留足余量 */
    static char g[800][800];
    void draw(int n, int r, int c){
        if(n == 1){ g[r][c] = 'X'; return; }
        int u = 1; for(int i=2;i<n;i++) u *= 3;   /* u = 3^(n-2) */
        draw(n-1, r, c);
        draw(n-1, r, c + 2*u);
        draw(n-1, r + u, c + u);
        draw(n-1, r + 2*u, c);
        draw(n-1, r + 2*u, c + 2*u);
    }
    int main(){
        int n; if(scanf("%d", &n) != 1) return 0;
        int s = 1; for(int i=1;i<n;i++) s *= 3;
        memset(g, ' ', sizeof(g));
        draw(n, 0, 0);
        for(int i=0;i<s;i++){
            int last = -1;
            for(int j=0;j<s;j++) if(g[i][j] == 'X') last = j;
            for(int j=0;j<=last;j++) putchar(g[i][j]);
            putchar('\n');
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    2659
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者