如何在C中使用for循环创建模式

时间:2012-10-08 12:00:41

标签: c design-patterns

我被这个问题困扰了。我需要创建一个模式,如:

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;
}

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:1)

这可以使用嵌套for循环来完成。让我们检查一行输出的公式:

第1行

  

1

可以使用这样的简单for循环来制作:

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

第2行

  

21

嗯,这需要改变我们的结构,因为我们不能打破迭代#1的输出,但是我们仍然需要能够在那里添加'2'......这样的东西应该有效:< / p>

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

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

第3行:

  

221

等等,现在我们需要两个'2'!我们如何在不破坏第2和第3行的情况下做到这一点?这样的事情应该这样做:

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

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

请注意,我使用了while循环而不是for循环。这是一个练习让读者弄清楚如何将while循环转换为for循环。

希望这有助于您了解将来解决类似问题的过程 - 因为它是一项重要的编程技能。