ヒント

(1)まず,大きさ固定の図形(n=7)から考えよう

---*---
--***--
-*****-
*******

まずまともに考えてみる

「-」を3個書き,「*」を1個書き,「-」を3個書く
「-」を2個書き,「*」を3個書き,「-」を2個書く
「-」を1個書き,「*」を5個書き,「-」を1個書く
「-」を0個書き,「*」を7個書き,「-」を0個書く

全部で4行であり,同じような記述なので
for (i=0; i<4; i++) {
    「-」を○個書き,「*」を□個書き,「-」を○個書く
}
という形になることに気づく。
繰り返し時のiの値は,0,1,2,3である。

iの値が0,1,2,3の時,「-」を書く個数は3,2,1,0であり,「*」を書く個数は1,3,5,7である。

そこで次のように考える

iの値

「-」を書く個数

「*」を書く個数

0

3

1

1

2

3

2

1

5

3

0

7

一般的にiなら

3-i

2*i+1

for (i=0; i<4; i++) {
    「-」を(4-1-i)個書き,「*」を(2*i+1)個書き,「-」を(4-1-i)個書く
}

(2)次に,大きさ固定の図形(n=9)を考えよう

----*----
---***---
--*****--
-*******-
*********

まずまともに考えてみる

「-」を4個書き,「*」を1個書き,「-」を4個書く
「-」を3個書き,「*」を3個書き,「-」を3個書く
「-」を2個書き,「*」を5個書き,「-」を2個書く
「-」を1個書き,「*」を7個書き,「-」を1個書く
「-」を0個書き,「*」を9個書き,「-」を0個書く

全部で5行なので
for (i=0; i<5; i++) {
    「-」を○個書き,「*」を□個書き,「-」を○個書く
}
という形になることに気づく。
繰り返し時のiの値は,0,1,2,3,4である。

iの値が0,1,2,3,4の時,「-」を書く個数は4,3,2,1,0であり,「*」を書く個数は1,3,5,7,9である。

そこで次のように考える

for (i=0; i<5; i++) {
    「-」を(5-1-i)個書き,「*」を(2*i+1)個書き,「-」を(5-1-i)個書く
}

 
 
 
(3) n=7の時とn=9の時に共通する考え方を導き出そう
n=7の時には4行となり

for (i=0; i<4; i++) {
    「-」を(4-1-i)個書き,「*」を(2*i+1)個書き,「-」を(4-1-i)個書く
}

n=9の時には5行となり

for (i=0; i<5; i++) {
    「-」を(5-1-i)個書き,「*」を(2*i+1)個書き,「-」を(5-1-i)個書く
}


同じ規則で考えると,n=5の時には3行となり

for (i=0; i<3; i++) {
    「-」を(3-1-i)個書き,「*」を(2*i+1)個書き,「-」を(3-1-i)個書く
}

なる。またn=11の時には6行となる

for (i=0; i<6; i++) {
    「-」を(6-1-i)個書き,「*」を(2*i+1)個書き,「-」を(6-1-i)個書く
}

となる。これをまとめると

nの値

行の数
5 3
7 4
9 5
11 6

となる。一般にnの時には,行の数は(n+1)/2になっていることがわかる。

すなわち,一般にnの場合は

m=(n+1)/2を計算しておき,
for (i=0; i<m; i++) {
    「-」を(m-1-i)個書き,「*」を(2*i+1)個書き,「-」を(m-1-i)個書く
}

とすればよい。