1

私はこの問題に困惑しています。次のようなパターンを作成する必要があります。

1
21
221
2221
22221

ネストされたforループを使用します。私は何かをします(A)

222221
222221
222221
222221
222221

かつては何かをしたことがありました(B)

/ * 1 * 21 * 221 * 2221 * 22221 * 222221 * 2222222 * /

#include <stdio.h>

main()
{
    int n, c, k;

    printf("Enter number of rows\n");
    scanf("%d",&n);

    for ( c = 1 ; c <= n ; c++ )
    {
        printf("1\n");

        for( k = 1 ; k <= c ; k++ )
        printf("2");


    }

    return 0;
}

ヒントがあれば役に立ちます。

解決策-支援することを決定した知的な人々に感謝します。私はあなたの助けに感謝します!

#include <stdio.h>

main()
{
    int n, c, k;

    printf("Enter number of rows");
    scanf("%d",&n);

    for ( c = 1 ; c <= n ; c++ )
    {


        for( k = 1 ; k < c ; k++ )
        {
            printf("2");
        }

        printf("1\n");
    }

    return 0;
}
4

2 に答える 2

1

これが最初のパターンを生成するコードです。

#include <stdio.h>

#define NUMLINES 5

int main(void) {
    int i, j;
    for(i=0; i<NUMLINES; i++) {
        for(j=0; j<i; j++) {
             printf("2");
        }
        printf("1\n");
    }
    return 0;
}

重要な部分はfor、外側のループの現在の値に達するまで内側のループがループすることです(j<i)。

于 2012-10-08T12:12:34.003 に答える
1

これは、ネストされたforループを使用して実行できます。出力の1行の式を調べてみましょう。

1行目

1

これは、次のような単純なforループを使用して作成できます。

for (int i = 0; i < 1; i++)
{
    putc('1', stdout);
    putc('\n', stdout);
}

2行目

21

うーん、これには、反復#1の出力を中断できないため、構造を変更する必要がありますが、そこに「2」を追加できる必要があります...次のようなものが機能するはずです。

for (int i = 0; i < 2; i++)
{
    if (i > 0)
       putc('2', stdout);

    putc('1', stdout);
    putc('\n', stdout);
}

3行目:

221

待ってください。2つの「2」が必要です。ラインの2と3を壊さずにこれを行うにはどうすればよいですか?さて、このような何かがそれを行う必要があります:

 for (int i = 0; i < 3; i++)
 {
     int j = i;
     while (j--)
     {
         putc('2', stdout);
     }

     putc('1', stdout);
     putc('\n', stdout);
 } 

whileforループの代わりにループを使用したことに注意してください。これは、whileループをforループに変換する方法を理解するための読者の練習です。

うまくいけば、これが将来このような同様の問題を解決する背後にあるプロセスを理解するのに役立つでしょう-それは持つべき重要なプログラミングスキルだからです。

于 2012-10-08T12:15:52.007 に答える