思路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;
}