C言語関係掲示板

過去ログ

No.354.2重ループでABCのピラミッド

[戻る] [ホームページ]
No.2290

forループ
投稿者---シュナータ(2002/08/04 03:15:49)


いろいろと考えてHP見回ったりしてみたのですが
最後の部分がわからないので誰か力になってください。

    A

   ABA

  ABCBA

 ABCDCBA

ABCDEDCBA



forループの中にforループ3つ使って上のをださ
ないといけないんですけど最後のループがわからないんです。。


int main(void)
{
    
        int n, i, left, right;
       
        for (n = 0; n < 5; n++)
        {
                for (i = n; i <= 3; i++){
                                printf(" ");
                }               
               
                for (left = 'A'; left <= ('A' + n); left++){
                                printf("%c", left);
                }
               
                printf("\n");
               
        }
        return 0;
}





No.2291

Re:forループ
投稿者---TDa(2002/08/04 09:02:23)


こんにちは。

>最後のループがわからないんです。。
最初のループもおかしいんだけど。

わかりやすいように3段目で考えましょうか。

まず空白が2つ
次に'A'から'C'まで
次に'B'から'A'まで
出力されています。

次に考えることは1段増えるごとにどう変化しているか。
空白は
1段目は4つ、2段目は3つ、3段目は、、、、
次の出力は'A'から
1段目は'A'まで、2段目は'B'、3段目は、、、、
その次の出力は
1段目なし、2段目は'A'、3段目"BA"、、、

境界をどちらのループに入れたほうが書きやすいかは別にして上記のように考えれば
難しくないですよ。


No.2293

Re:forループ
投稿者---シュナータ(2002/08/04 10:30:15)


一応なんとかできました!
どこか書き方おかしいでしょうか?

int main(void)
{
       
        int n, space, left, right;
        
        for (n = 0; n < 5; n++)
        {
                for (space = n; space <= 3; space++){
                        printf(" ");
                }               
                
                for (left = 'A'; left <= ('A' + n); left++){
                        printf("%c", left);
                }

                for (right = ('A' + n - 1); right >= 'A'; right--){
                        printf("%c", right);
                }             
                printf("\n");
        }
        return 0;
}


No.2296

Re:forループ
投稿者---TDa(2002/08/04 13:08:26)


>一応なんとかできました!
>どこか書き方おかしいでしょうか?

最初のループおかしいと思ったのですがこれでよかったのですね。
しかし私がおかしいと思ったのはマジックナンバー3のせいです。

ピラミッドの段数は5段です。たとえば1段目だとスペースは4つ表示です。
どこにも3という数字はでてこない。だから私は一見して最初のループが間違っていると
勘違いしてしまったのです。

でも意図したとおりの出力ですね。間違っている訳ではないですが

for (space = n; space <= 3; space++){
ではなく
for (space = n; space < 4; space++){
と書いてあればたぶん私は間違っていると思わなかっただろうし(スペースが4つ出力されているから)
for (space = n; space < 5 - 1; space++){
なら4の根拠もわかるのでこっちがいいでしょう。

defineしたほうがいいという場合もあるでしょうがこのくらいの大きさなら
defineしなくても可読性が落ちることはないと思います。