题解 | #圣诞树#

圣诞树

https://www.nowcoder.com/practice/9a03096ed8ab449e9b10b0466de29eb2

#include <stdio.h>

//思路:我们可以观察到树叶部分是由一些相同的三角形构成的,树的底部就是处于中间的所输入n层的n个*,所以大体上我们就可以分为2部分来打印

int main() 
{
    //一、先打印上面“树叶”部分
    int n=0;    //层数
    scanf("%d",&n);
    int i=0;    //循环控制层数
    int m=3*n;  //用于控制打印空格,不直接用3*n,而是重新定义一个变量,是因为在打印过程中每一层要打印的空格不同,我们需要对m进行变化
    for(i=1;i<=n;i++)
    {
        //打印第i层的第一行
        int space=m-1;    //三角形前面的空格
        while(space--)
        {
            printf(" ");
        }

        int k=0;    //因为打印过程中相邻三角形会出现"*     "
        for(k=0;k<i;k++)
        {
            printf("*     ");   //打印每层三角形的第一行
        }
        printf("\n");

        //打印第i层的第二行
        int space2=m-2;        //空格少1
        while(space2--)
        {
            printf(" ");
        }
        for(k=0;k<i;k++)
        {
            printf("* *   ");   //到了第二行相邻三角形间变为了"* *   "
        }
        printf("\n");

        //打印第i层的第三行
        int space3=m-3;         //空格少1
        while(space3--)
        {
            printf(" ");
        }
        for(k=0;k<i;k++)
        {
            printf("* * * ");   //第三行变成了"* * * "
        }
        printf("\n");
        
        m=m-3;  //每层少打3个空格

    }

    //二、底部
    int bottom=0;
    for(bottom=0;bottom<n;bottom++)
    {
        int j=0;
        for(j=0;j<3*n-1;j++)
        {
            printf(" ");
        }
        printf("*\n");
    }

    return 0;
}

全部评论

相关推荐

头像
点赞 评论 收藏
转发
3 收藏 评论
分享
牛客网
牛客企业服务