解析:这个输出图形的题就是一个找规律加数学计算,我们发现每行比上一行多两个*,最后一行的*表达式为h+(h-1)*2,即3*h-2,那么每一行就是一个先输出最后一行-当前行*个数个空格,然后输出*的过程。
代码:
#include<stdio.h>
int main()
{int h;while(scanf("%d",&h)!=EOF){int a[h];//用来存储每行应该输出*个数 for(int i=0;i<h;i++){a[i]=h+i*2;//存储每行应该输出*个数 for(int j=0;j<(3*h-2)-a[i];j++){printf(" ");//每行空格个数=最后一行- 每行应该输出*个数 }for(int j=0;j<a[i];j++){printf("*");}printf("\n");}}return 0;
}
另一种方法是:
知道每行必然会输出h+(h-1)*2个字符,于是通过遍历让小于h+(h-1)*2-(h+i*2)的输出为空格,其余的输出为*
代码:
#include<stdio.h>
int main()
{int h;while(scanf("%d",&h)!=EOF){int maxline=h+(h-1)*2;//最大行的* for(int i=0;i<h;i++){for(int j=0;j<maxline;j++){if(j<maxline-(h+i*2))//最大行*个数-每行的*个数 {printf(" ");}else{printf("*");}}printf("\n");}}return 0;
}