#include <math.h>
#include <stdio.h>

int main() {
    int n, i, j, x, y, x1, y1, move;
    scanf("%d", &n);
    char a[1000][1000] = {0};
    y = 3 * pow(2, n - 1) - 1;
    a[0][y] = '*';
    a[1][y - 1] = '*';
    a[1][y + 1] = '*';
    a[2][y - 2] = '*';
    a[2][y] = '*';
    a[2][y + 2] = '*';
    //若n大于2则复制上一个三角形到左下角和右下角
    for (i = 1; i < n; i++) {
        move = 3 * pow(2, i - 1) - 1;
        //左下角
        for (x1 = 0; x1 < 3 * pow(2, i); x1++) { //上一个三角形的层数
            for (y1 = y - move; y1 <= y + move;y1++) 
            { //从上个三角形的最左边遍历到最右边
                a[x1 + move + 1][y1 - move - 1] = a[x1][y1];
            }
        }
        //右下角
        for (x1 = 0; x1 < 3 * pow(2, i); x1++) { //上一个三角形的层数
            for (y1 = y - move; y1 <= y + move; y1++) 
            { //从上个三角形的最左边遍历到最右边
                a[x1 + move + 1][y1 + move + 1] = a[x1][y1];
            }
        }
    }
    for(i=0;i<y+1;i++)
    {
        for(j=0;j<3*pow(2,n)-1;j++)
        {
            if(a[i][j]=='*') printf("*");
            else printf(" ");
        }printf("\n");
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<=y;j++)
        {
            if(j==y) printf("*");
            else printf(" ");
        }printf("\n");
    }return 0;
}

不想在画图了