質問: 1; j <= (i-1)*2+1; j++) { /* 理解不能(>皿<) */ putchar('*'); } putchar('\n'); } return 0; } ``` `1` と `2` が理解できません。 ### 1 なぜ、`h - i + 1`になるのですか? なぜ、 `h - i`ではダメなのですか? ### 2 ぼんやりと頭に浮かんでいる気がするのですが、ぼやけすぎていて、全くわかりません。 `(i-1)*2+1;`の`i`に数を代入してみたら、ちゃんと表示すべき個数になるということは、わかったのですが、なぜ、この式になるのですか? じっくりねっとり解説お願いします>
回答: h-i+1について 左に必ず最低1つは空白を確保しておきたいからですかね? 左詰めでよければ+1しなくてもいいような気がします。 (i-1)*2+1について 00100:1個 01110:3個 11111:5個 という図は中心から左右対称です。 中心の縦の1ラインとその左右と3分割して考えてみてください。 (左側) 00:1個の左側は0個 01:3個の左側は1個 11:5個の左側は2個 (中央) 1:1個の中央は1個 1:3個の中央は1個 1:5個の中央は1個 (右側) 00:1個の右側は0個 10:3個の右側は1個 11:5個の右側は2個 式「(i-1)*2+1」の(i-1)は左右に必要な個数になります。 iが1、つまり1段目は左側に0個、右側に0個(iが1なら0が欲しい) 2段目(iが2)なら左に1個、右に1個(iが2なら1が欲しい) *2なのは左と右の2つで1セットなので2倍にしています。 最後の+1は中央の分が常に1個あるので+1している、という具合。