绘制倒三角形变基长

时间:2016-10-17 08:14:31

标签: c design-patterns

如果这是一个基本问题,我很抱歉,但我已经在这个问题上工作了好几个小时。 下面的代码根据输入行打印一个倒三角形。 如何根据输入基数LENGTH编辑此代码以绘制倒三角形?

即:

输入基数= 5

  ***** //five characters here
   ***
    *

我不知道怎么想出一个没有弄乱模式的公式。 这是我试图编辑的代码,

#include<stdio.h>

int main()
{
    int rows, i, j, space;

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

    for(i=rows; i>=1; --i)
    {
        for(space=0; space < rows-i; ++space)
            printf(" ");

        for(j=i; j <= 2*i-1; ++j)
            printf("*");

        for(j=0; j < i-1; ++j)
            printf("*");

        printf("\n");
    }

    return 0;
}

哪个给我输出

输入行= 5

 ********* // 5 ROWS of characters
  *******
   *****
    ***
     *
谢谢你!

1 个答案:

答案 0 :(得分:1)

如果您可以使用程序打印行,则可以派生一个小公式将基本长度转换为行数,如下所示=&gt;

<强> TL; DR:

使用以下公式:

BaseLength = (2 * NumberOfRows ) -1

长版:

首先我们看到,对于每一行,基本长度始终是奇数。另外,每增加一行,基本长度形成一个相差2的算术级数(AP),例如2。如果行数为2,则基本长度为3.如果行数为3,则基本长度为5.

如您所见,行计数形成一个差异为1 =&gt;

的AP
1, 2, 3, 4, ...

相应地,基本长度形成具有差异2 =>

的AP
1, 3, 5, 7 ...

因此,我们可以如下计算基本长度AP中的第n个元素=&gt;

T(n) = a + (n - 1)*d

其中a是系列中的第一个元素,而d是系列中元素之间的差异。插入值a = 1d = 2

T(n) = 1 + (n - 1)*2 = 2n -1

请注意,n表示行数,T(n)表示基本长度,表示关系变为=&gt;

BaseLength = (2 * NumberOfRows ) -1

因此,如果您输入BaseLength = 9,则会获得NumberOfRows = 5

您可以在代码中使用此公式将基本长度转换为行数,同时保持核心功能(即打印行*)完全相同。