for (int row = 0; row < 5; row++)
{
// PRINTS CORRECT NUMBER OF SPACES
for (int space = 0; space < 5 - row - 1; space++)
{
Console.Write(" ");
}
// PRINTS CORRECT NUMBER OF STARS
for (int star = 0; star < row * 2 + 1; star++)
{
Console.Write("*");
}
// JUMPS ONTO NEXT LINE AFTER EVERY ITERATION OF THE FIRST LOOP
Console.WriteLine();
}
条件&#34; 5 - 行 - 1&#34;和&#34;行* 2 + 1&#34;在这段代码中工作?
答案 0 :(得分:1)
这就是注意金字塔中的模式。第一个for循环的注释表示它在实际金字塔之前打印了正确数量的空格(即星号)。
让我们看看每个级别有多少个空格:
* level 0 - 4 spaces
*** level 1 - 3 spaces
***** level 2 - 2 spaces
******* level 3 - 1 space
********* level 4 - 0 spaces
请注意,当级别数增加时,空格数会减少吗?它们是成反比的。什么是将级别号n
映射到空格数的函数?这将是
f(n) = 4 - n
或更一般地说,
f(n) = k - n - 1
其中k
是级别数。
这就是我们写5 - row - 1
的原因。它将row
(即n
)映射到应打印的空格数!
第二个for循环也是如此,它计算出应该打印多少个星号。
* level 0 - 1 asterisks
*** level 1 - 3 asterisks
***** level 2 - 5 asterisks
******* level 3 - 7 asterisk
********* level 4 - 9 asterisks
这次模式更简单。它只是一个算术序列。将级别编号映射到星号数的功能是
f(n) = 2 * n + 1
这解释了第二个for循环中的2 * row + 1
。