大家好,欢迎来到IT知识分享网。
【题目描述】
输入正整数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; }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/155515.html