题解 | #超级圣诞树#

超级圣诞树

https://www.nowcoder.com/practice/470d26c9a73e4e17be8cc45cac843423

#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;
}

不想在画图了

算法刷题(入门) 文章被收录于专栏

入门算法题目

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-17 09:40
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务