ヒント
(1)まず,大きさ固定の図形(n=7)から考えよう
---*---
--***--
-*****-
*******まずまともに考えてみる
「-」を3個書き,「*」を1個書き,「-」を3個書く
全部で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個書く
「-」を2個書き,「*」を5個書き,「-」を2個書く
「-」を3個書き,「*」を3個書き,「-」を3個書く
「-」を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)個書く
}
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)個書く
}
とすればよい。