既然 每行输出的空格数等于(最后一行*号数减去当前行的*号数)除2
但是他的参考代码,第一次循环的空格有4个,第二次3个
而第一行1个星,最后一行7星,(7-1)/2=3空格
第二行3星,(7-3)/2=2空格
为什么出现这种情况呢
我们通常思维是你这样的,画一个图形需要对称。但是这个输出是从左到右的文本,又由于是正三角形,左右对称,所以只要关心左侧空格的占位,不用关心右侧的空格数量。
可以把空格替换成其他字符串帮助理解。
这里第一行有四个空格是为了满足第四行有一个空格,不然其实第一行3个空格就能实现了。
#include <stdio.h>
int main()
{
int i, j, k;
for(i=1; i<5; i++)
{
/* 观察每行的空格数量,补全循环条件 */
for( i=1 ; i<=4-i ; i-- )
{
printf(" "); //输出空格
}
/* 观察每行*号的数量,补全循环条件 */
for( j=1 ; j<=2*i-1 ; j++ )
{
printf("*"); //每行输出的*号
}
printf("\n"); //每次循环换行
}
return 0;
}