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

可以使用这样的简单 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 和 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 循环。

希望这可以帮助您了解在未来解决类似问题的过程 - 因为这是一项重要的编程技能。

于 2012-10-08T12:15:52.007 回答