解析:這個輸出圖形的題就是一個找規律加數學計算,我們發現每行比上一行多兩個*,最后一行的*表達式為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;
}