金字塔打印算法

一、金字塔打印算法原理与实现

上图就是我们需要的金字塔效果,乍一看,似乎有点懵逼,怎么都是“*”号,可能新手遇到这种情况,会有点不知所措,所以我们要学会思考问题,并转换问题(注意,严格来讲,我教的不是算法,教的是算法思想)。

把“*”号,用数字表示,是不是感觉一下子就豁然开朗了?实在不行,我们还可以用补全法,把这个三角形补成一个矩形来增加大家印象。

假设打印的行数为6,*号以外地方(上图绿色区域)用空格表示。

第一行:(6-1)*2 个空格 ========= 1个*

第二行:(6-2)*2个空格==========3个*

第三行:(6-3)*2个空格==========5个*

第三行:(6-4)*2个空格==========7个*

第五行:(6-5)*2个空格==========9个*

第六行:(6-6)*2个空格(也就是没有空格)11个*

第N行:(ROWS-N)*2个空格 =====2N-1个*

这样分析之后,是不是问题就迎刃而解了!

二、金字塔打印算法源码

#include <stdio.h>

int main(int argc, char *argv[])
{
    int rows;

    printf("Please  input rows:\n");
    scanf("%d",&rows);

    for(int i=1;i<=rows;++i)
    {
        //空格个数
        int space = rows - i;
        //*个数
        int star = 2*i -1 ;

        //分行
        printf("\n");

        //左边空格
        for(int j=0;j<space;++j)
        {
            printf(" ");
        }
        //中间 *
        for(int j=0;j<star;++j)
        {
            printf("*");
        }
        //右边空格
        for(int j=0;j<space;++j)
        {
            printf(" ");
        }

    }

    return 0;
}

三、金字塔打印算法总结

核心算法

//rows表示总行数  i表示当前是第几行
//空格个数
int space = rows - i;
//*个数
int star = 2*i -1 ;

骚年,代码要多撸,光看,你还是不会滴!

我们的算法交流QQ群610962975,加入之后可以分享本栏目所有代码,以及群主珍藏多年的福利,你们懂的。

您可能还喜欢...

想说点什么吗?

1 评论 在 "金字塔打印算法"

提醒
avatar
佚名
游客
佚名

骚年,别放这些太露骨的照片