C - 嵌套for循环patern

时间:2017-10-05 12:55:49

标签: c for-loop

如何获得像翻转Floyds三角形的输出?以及如何解决它的最佳方式?

示例:

5555
_555
__55
___5

注意:_是一个空格

已经尝试了很多代码,但我仍然无法获得这样的输出。

我的一个代码:

#include<stdio.h>

int main () {
    int a,b,c,n;
    scanf("%d",&n);
    for(a=1;a<=n;a++) {
        for(b=n;b>=a;b--) {
            printf(" ");
        }
        for(c=1;c<=a;c++) {
            printf("*");
        }
        printf("\n");
    }
}

2 个答案:

答案 0 :(得分:2)

这不是最好的方式......但代码与您发布的代码类似。

int main()
{
    int a, b, c, n;
    scanf("%d", &n);
    for (a = n; a > 0; a--)
    {
        for (b = n; b >= a; b--)
        {
            printf(" ");
        }
        for (c = 1; c <= a; c++)
        {
            printf("*");
        }
        printf("\n");
    }
}

在原帖中,你首先进行循环是

for(a=1;a<=n;a++)

这意味着第二个for循环将打印n *空格而第三个for循环将打印一个星。 通过将第一个for循环更改为

for (a = n; a > 0; a--)

所有内容都被反转,因此第一个循环将不会打印任何空格并持续循环n *星。

答案 1 :(得分:1)

作为一个笑话;)

#include <stdio.h>

int main( void )
{
    int n = 5555;

    while (n)
    {
        printf("%5d\n", n);
        n /= 10;
    }

    return 0;
}

程序输出与所需的相同。:)

 5555
  555
   55
    5

如果要使用循环,那么例如程序可能看起来像

#include <stdio.h>

int main( void )
{
    const char c = '5';

    while (1)
    {
        printf("Enter a non-negative number (0 - exit): ");

        unsigned int n;

        if (scanf("%u", &n) != 1 || n == 0) break;

        putchar('\n');

        for (unsigned int i = 0; i < n; i++)
        {
            unsigned int j = i + 1;
            printf("%*c", (int)j, c);
            while (j++ < n) putchar(c);
            putchar('\n');
        }

        putchar('\n');
    }

    return 0;
}

它的输出可能看起来像

Enter a non-negative number (0 - exit): 10

5555555555
 555555555
  55555555
   5555555
    555555
     55555
      5555
       555
        55
         5

Enter a non-negative number (0 - exit): 0

内部while循环可以替换for循环

for ( ; j < n; j++ )