【题目描述】
输入正整数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;
}