1.
拿到题目,首先观察圣诞树的规律,经过观察我们不难发现,圣诞树为三行一循环,输入n,则代表有n层循环,共有3n行。
2.
确定前方空格数量,通过观察,第一行前面有3n-1个空格,逐层递减。
3.
该图形由组成,于是我们可以用拆分的思想来解决问题,我们发现三角形的第一颗*与后方三角形的第一颗*隔了5个空格,通过观察,我们可以将三角形分为三个部分(点代表空格):
代码实现如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int n = 0;
int j = 0;
int k = 0;
scanf("%d", &n);
//总共3n行,用d确定第一颗*的位置
int d = 3 * n - 1;
//总计n轮循环
for (i = 1; i <= n; i++)
{
//打印第一部分
for (j = d - 1; j >= 0; j--)
{
printf(" ");
}
for (k = 0; k < i; k++)
{
printf("* ");
}
printf("\n");
//打印第二部分
for (j = d - 2; j >= 0; j--)
{
printf(" ");
}
for (k = 0; k < i; k++)
{
printf("* * ");
}
printf("\n");
//打印第三部分
for (j = d - 3; j >= 0; j--)
{
printf(" ");
}
for (k = 0; k < i; k++)
{
printf("* * * ");
}
printf("\n");
//打印完一次循环之后行数减3进入下一次循环
d = d - 3;
}
//最后打印底部
for (j = 0; j < n; j++)
{
for (i = 0; i < 3*n-1; i++)
{
printf(" ");
}
printf("*");
printf("\n");
}
return 0;
}