void hollowPyramid ( int n ){
int i,j,k,l;
for(i=1;i<=n;i++){ //控制一共有几行,我们可以理解在有规律的输出中,最外层的for是管行的。
for(j=1;j<=n-i;j++){ //内层的for如果是先多后少的话一般是应用总共的-行数(i)
printf(" ");
}
if(i==1){//特殊情况特殊分析,此处的“==”千万不要写成“=”号
printf("1\n");
}
else if(i>1&&i<=n-1){//对中间行的描述
printf("%d",i);//一步一步来,我们不是一口气做完所有而是一点一点的蚕食。
for(k=1;k<=2*i-3;k++){//第二行1个空格,第三行3个空格,不要慌张就是看出来规律构建规律。
printf(" ");
}
printf("%d\n",i);
}
else if(i==n){//对最后一行的描述,此时我们可以观察第一行,有5个字符,就是我们所要打出来的行数,我们先定为n,然后我们发现后一行多了一个字符,以此类推,最后一行比第一行多了n-1个字符,所以总共是(2*n-1),切记::2*n千万不要写成2n,会出事的。
for(l=1;l<=2*n-1;l++){
printf("%d",i);
}
}
}
}
我们要先寻找该金子塔的规律,左面的空格每行比前一行少一个,第一行是1个1,中间的是2个i,然后2个i中间的空格每行比前一行多两个,最后一行则是全都是i,同时我们有看出来最后一行一共占2n-1个,根据这个我们就可以一步一步来,第一层for循环来解决左面的空格,第二个for解决中间的空格,第三个for我们呢解决最后一行的特殊性,第一行和最后一行的特殊性我们需要单独打出来,由此我们就可以知道我们需要打出来什么。
结论:碰见需要多重for循环的时候我们不能慌,要一层一层的实现,要一个一个形式去打印出来,就像这道题一样,我们一定要理清楚每层for循环对应的关系,一定一点一点来,一口气看的话容易喘不过来气。这么多博客发的文章看到了我的,很幸运能被你遇见,不如看完😏🤣。有什么能优化的我洗耳恭听,加油加油加油(ง •_•)ง。