本题要求实现一个函数,输出n行空心的数字金字塔。

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);
            }
        }
    }
}

我们要先寻找该金子塔的规律,左面的空格每行比前一行少一个,第一行是11,中间的是2i,然后2i中间的空格每行比前一行多两个,最后一行则是全都是i,同时我们有看出来最后一行一共占2n-1个,根据这个我们就可以一步一步来,第一层for循环来解决左面的空格,第二个for解决中间的空格,第三个for我们呢解决最后一行的特殊性,第一行和最后一行的特殊性我们需要单独打出来,由此我们就可以知道我们需要打出来什么。

结论:碰见需要多重for循环的时候我们不能慌,要一层一层的实现,要一个一个形式去打印出来,就像这道题一样,我们一定要理清楚每层for循环对应的关系,一定一点一点来,一口气看的话容易喘不过来气。这么多博客发的文章看到了我的,很幸运能被你遇见,不如看完😏🤣。有什么能优化的我洗耳恭听,加油加油加油(ง •_•)ง。

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值