本文主要是介绍倒三角形的两种输出方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【题目描述】
输入正整数n≤20,输出一个n层的倒三角形。例如,n=5时输出如下:
#########
#######
#####
###
#
【题目来源】
刘汝佳《算法竞赛入门经典 第2版》习题2-3 倒三角形(triangle)
【解析】
输出的三角形本质上是一个等差数列,关键是找到最后一个数与n的关系。首项为1,公差为2,显然第n项等于2n-1。只不过,这个等差数列要倒序输出。
解法一:累加器+公式法
从输出的图形可以看出,每行输出的空格数是递增1的,由此可以利用累加器cnt++输出空格;“#”的输出数量则利用等差数列求第n项的公式求出。
#include<stdio.h>
int main(){int n, cnt=0;scanf("%d", &n);while(n){for(int i=1; i<=cnt; i++) printf(" ");for(int j=1; j<=2*n-1; j++) printf("#");printf("\n");n--;cnt++;}return 0;
}
解法二:等差法
思路是先求最大项,即第一行要输出的“#”数量(也就是等并数列的最后1项2n-1),以它为基准,其后每一项输出“#”的数量比前一项减2,输出的空格是(最大#数量-当前行#数量)/2。
#include<stdio.h>
int main(){int n;scanf("%d", &n);for(int i=2*n-1; i>0; i-=2){for(int k=1; k<=(2*n-1-i)/2; k++) printf(" ");for(int j=1; j<=i; j++) printf("#");printf("\n");}return 0;
}
这篇关于倒三角形的两种输出方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!