解析:这个输出图形的题就是一个找规律加数学计算,我们发现每行比上一行多两个*,最后一行的*表达式为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;
}