题解 | #圣诞树#
圣诞树
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; }