N-39. 没有圣诞树的圣诞夜

因为疫情,David没有出门购买圣诞节所需要的圣诞树,心里感觉空落落的。请你用程序给他绘制一个圣诞树,满足他的心愿。绘制规则如下:

1.输入的正整数n为总行数;

2.每三行一组,最后剩下的1~3行绘制树干,整体居中;

3.每一组(以第i组为例,i从1开始)第一行打印3个’’,第二行打印3+4i个’’,第三行打印3+8i个’*’;

4.树干的那几行每行3个’*’。

简单的图形打印问题,我们需要处理的点有:组数与树干行数, 如何居中。

#include <stdio.h>  
#include <string.h>  
int main () {  
    int n;  
    scanf("%d" , &n);  
    int p = n % 3 ? n / 3 : n / 3 - 1, q = n % 3 ? n % 3 : 3; // p组数,q树干行数 
    int max = 3 + 8 * p;  // 总长度
    for (int i = 1; i <= p; i++) {  
        for (int j = 1; j <= (max - 3) / 2; j++) printf(" ");  
        for (int j = 1; j <= 3; j++)printf("*");  
        printf("\n");  // 第一行
        for (int j = 1; j <= (max - 3 - 4 * i) / 2; j++) printf(" ");  
        for (int j = 1; j <= 3 + 4 * i; j++)printf("*");  
        printf("\n");  // 第二行
        for (int j = 1; j <= (max - 3 - 8 * i) / 2; j++) printf(" ");  
        for (int j = 1; j <= 3 + 8 * i; j++)printf("*");  
        printf("\n");  // 第三行
    }   
    for (int i = 1; i <= q; i++) {  
        for (int j = 1; j <= (max - 3) / 2; j++) printf(" ");  
        for (int j = 1; j <= 3; j++)printf("*");  
        printf("\n");  // 树干(和每组第一行一样)
    }  
    return 0;  
}  

posted @ 2022-04-20 19:43  misasteria  阅读(65)  评论(0编辑  收藏  举报