金字塔代码的For循环条件机制

时间:2018-01-18 17:38:26

标签: c#

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;在这段代码中工作?

1 个答案:

答案 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