牛客网BC141 圣诞树习题

文章提供了两种C语言代码实现方式,用于打印带有树干的树形结构。第一种方法是按组划分,每三行作为一个循环对象,根据输入的行数调整树干长度。第二种方法则是按照每轮三行进行循环,每次循环增加一次小三角形的打印次数。
摘要由CSDN通过智能技术生成

思路1:

树部分:分成n组考虑(三行分一组,将最开始的三行*图形为循环对象),第一组循环1次,第二组循环2次以此类推;

树干部分:根据输入的n来决定多长;

代码如下:


int main()
{
    int i = 0;
    int j = 0;
    int a = 0;
    scanf("%d", &a);
    int row = a * 3;
    int n = row;
    for (i = 0; i < a; i++)//循环a次(三行为一组)
    {
        for (j = 0; j < row - 1; j++)
        {
            printf(" ");//这里是第一行所以打印row-1个空格(根据行数来打印空白部分)
        }
        for (j = 0; j <=i; j++)//第i组循环i次,第i组第一行(是i组不是1组)
        {
            printf("*     ")
        }
        printf("\n");
        for (j = 0; j < row - 2; j++)//(第i组第二行打印空白次数)
        {
            printf(" ");
        }
        for (j = 0; j <= i; j++)//第i组循环i次,第i组第二行
        {
                printf("* *   ");
            
        }
        printf("\n");
        for (j = 0; j < row - 3; j++)//第i组第三行打印空白次数)
        {
            printf(" ");
        }
        for (j = 0; j <=i; j++)//第i组循环i次,第i组第三行
        {
            printf("* * * ");
        }
        row = row-3;//因为三行为一组所以下一组前面的空白次数要从row-3开始
        printf("\n");
    }
    for (i = 0; i < a; i++)//打印树干
    {
        for (j = 0; j < n-1; j++)//n-1次空白次数
        {
            printf(" ");
        }
        printf("*\n");
    }
    return 0;
}

思路2:

这里是按照循环n行,也就是n次循环,每轮三行,循环次数加一(这里把最开始三行的小三角形作为循环体)

代码如下


int main()
{
    int i = 0;
    int a = 0;
    scanf("%d", &a);
    int row =3 * a;
    int j = 0;
    int n = 1;
    for (i = 1; i <= row; i++)//共row=3*a行
    {
        for (j = 1; j<= row - i; j++)//打印空白次数
        {
            printf(" ");
        }
        if (i % 3 == 1)//判断是否是循环体三行中的第一行
        {
            for (j = 1; j <= n; j++)//这里把n最开始赋值为1,循环n次
                printf("*     ");
            
        }
    
        if (i % 3 == 2)//判断是否是循环体三行中的第二行
        {
            for (j = 1; j <= n; j++)//循环n次
            {
                printf("* *   ");
            }
            
        }
        
        if (i % 3 == 0)//判断是否是循环体三行中的第三行
        {
            for (j = 1; j <= n; j++)//循环n次
            {
                printf("* * * ");
            }
        }
    
        if (i % 3 == 0)
        {
            n++;//每增加三行,循环次数加一
        }
        printf("\n");
    }
    for(j=1;j<=a;j++)//打印树干
    {    
        for (int k = 0; k < row-1; k++)//打印空白次数
        {
             printf(" ");
        }
        printf("*\n");
    }

    return 0;
}
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值