[boj]c言語-2439号(星図-2)


質問する


1行目は1つの星、2行目は2つの星、N行目は1つの星
ただし、右揃えの星を出力してください(例を参照).
リンクテキスト

入力


第1行はN(1≦N≦100)を与える.

しゅつりょく


1行目からN行目まで順に星を出力します.

に答える


この問題にも長い時間がかかった.どうすればいいのか感じたけど叶わなかった….
まずfor文で全体の繰り返しを行い、
空白をfor文で表現して、for文で表現する*ということは分かっていましたが、このfor文の順番、あるいは空白を表すfor文の初期式、そしてどのように条件式をつかむか、悩んでいました.結局そうして、そうして、何度も試して、悩んで一日を過ごして、うっとうしくグーグルゲームをしました.
私が最初に試したコードはこうです.

<無効なコード>

#include <stdio.h>

int main()
{
    int n; //별 개수
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
    {
        for(int s=n-1; s>=0; s--)
        {
            printf(" ");
        }
        for(int j=1; j<=i; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
私が何を考えているのか、このようにはっきり見えます.大体の構造はよく配置されているが,文中の初期式と条件式の出力に対してスペースを間違えた.初期式では、n−1は行ごとに空白の個数が異なるべきであるが、同じであることを示す.私はここで太原の始まりを考えていると思います.また、条件式も0を基準とすると、もう1つのスペースが出力されます.

ソースコード

#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    for(int i=1; i<=n; i++) // 몇번째 줄인지를 나타내주는 for문(줄바꿈 표시도)
    {
        for(int j=(n-i); j>=1; j--) //공백을 표현해주는 for문
        {
            printf(" ");
        }
        for(int j=1; j<=i; j++) //*을 출력해주는 for문
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

メモ


この問題をやってもたくさん勉強になりました.
1つ目は上の空白for文と*for文で、私はずっとfor文ごとに異なる変数を使用しなければならないと思っています.ここで、両方のfor文は変数jを使用しますが、それぞれがfor文でjを再宣言するので関係ありません.もちろん、他の変数を使うのも正しいです.
2つ目はfor文の初期式と条件式の関係です.上のコードはそう書いてありますが、それだけが正しいとは限りません.意味が同じなら、少なくとも違う.私は空白の-forクエリーfor(intj=(n-i);j>=1; j--)は(int j=1;j<=(n-i);j++に変えて、これも正解です.各for文の繰返し範囲を正しく使用することが重要であるようです.
最後にfor文の実行順序です.簡単なfor文は簡単ですが、for文が多ければ多いほど混同や混乱しやすく、正しいコードの実行順序を把握していないようです.
上記のコードは、nが4入力を受け入れると仮定する.
最初のfor文でi=1
->2番目のfor文j=(4-1)=3を
->printf、スペースを出力
->2番目のfor文に戻り、式j=2に従います
->printfに降りて、スペースを出力します
->2番目のfor文をさらに上げ、式j=1に基づいて
->printfに降りて、スペースを出力します
->二度目のforゲート脱出
->3番目のfor文のj=1
->printfに降りて*を出力します.
3度目のドア
->printfへの改行
->最初のfor文に戻り、i=2
...
この手順を繰り返します
このようにコードを一つ一つ実行し、順番を一つ一つ整理すると、私が何を混同しているのか分かります.
for文の実行順序を簡単に整理します.
最初のforからi=1、->2番目のforから変数の初期値から条件値まで順次1行に出力し、decaption->3番目のforも変数の初期値から条件値に出力し、次にその行に出力し、decaption->改行印刷、i=2->1番目のforのi値が条件に達するまで、最初のforに繰り返します
->終了
今までFor Moonとそんなに亲しく感じたことはなかったのですが…しっかりやろう...!
慣れるまでもっと使います…!