如果这是一个基本问题,我很抱歉,但我已经在这个问题上工作了好几个小时。 下面的代码根据输入行打印一个倒三角形。 如何根据输入基数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
*******
*****
***
*
谢谢你!
答案 0 :(得分:1)
如果您可以使用程序打印行,则可以派生一个小公式将基本长度转换为行数,如下所示=&gt;
<强> TL; DR:强>
使用以下公式:
BaseLength = (2 * NumberOfRows ) -1
长版:
首先我们看到,对于每一行,基本长度始终是奇数。另外,每增加一行,基本长度形成一个相差2的算术级数(AP),例如2。如果行数为2,则基本长度为3.如果行数为3,则基本长度为5.
如您所见,行计数形成一个差异为1 =&gt;
的AP1, 2, 3, 4, ...
相应地,基本长度形成具有差异2 =>
的AP1, 3, 5, 7 ...
因此,我们可以如下计算基本长度AP中的第n个元素=&gt;
T(n) = a + (n - 1)*d
其中a
是系列中的第一个元素,而d
是系列中元素之间的差异。插入值a = 1
,d = 2
T(n) = 1 + (n - 1)*2 = 2n -1
请注意,n
表示行数,T(n)
表示基本长度,表示关系变为=&gt;
BaseLength = (2 * NumberOfRows ) -1
因此,如果您输入BaseLength = 9
,则会获得NumberOfRows = 5
。
您可以在代码中使用此公式将基本长度转换为行数,同时保持核心功能(即打印行*)完全相同。