一、金字塔打印算法原理与实现
上图就是我们需要的金字塔效果,乍一看,似乎有点懵逼,怎么都是“*”号,可能新手遇到这种情况,会有点不知所措,所以我们要学会思考问题,并转换问题(注意,严格来讲,我教的不是算法,教的是算法思想)。
把“*”号,用数字表示,是不是感觉一下子就豁然开朗了?实在不行,我们还可以用补全法,把这个三角形补成一个矩形来增加大家印象。
假设打印的行数为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,加入之后可以分享本栏目所有代码,以及群主珍藏多年的福利,你们懂的。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧