C# 数字三角形升序和降序 2

C# Number Triangle Ascending and Descending by 2

我找到了一种使用嵌套 for 循环显示以 18 结尾的三角形的上半部分的方法。我也不知道如何在嵌套的 for 循环中显示下半部分(它必须在嵌套的 for 循环中)。另外,如何使颜色从绿色和红色互换?有什么建议吗?

这是我的:

int n1, n2, n3;

// Top Triangle nested for loop
for (n1 = 2; n1 <=18; n1++)
{
    for (n2 = 2; n2 <= n1; n2++)
    {
        Console.Write("{0} ", n2);
        n2++;
    }
    n1++;
    Console.WriteLine();
}

// Bottom triangle nested for loop
// This is where I'm stuck

底部三角形部分:

  // Bottom triangle nested for loop
        for (n1 = 16; n1 > 2; n1 -= 2)
        {
            for (n2 = 2; n2 <= n1; n2 += 2)
            {
                Console.Write("{0} ", n2);
            }
            Console.WriteLine();
        }

更改颜色的完整代码:

   static bool _isRedColor = true;
    static void Main(string[] args)
    {
        int n1, n2;

        // Top Triangle nested for loop
        for (n1 = 2; n1 <= 18; n1 += 2)
        {
            _isRedColor = true;
            for (n2 = 2; n2 <= n1; n2 += 2)
            {
                SetConsoleColor();
                Console.Write("{0} ", n2);
                //n2++;
            }
            //n1++;
            Console.WriteLine();
        }

        // Bottom triangle nested for loop
        for (n1 = 16; n1 > 2; n1 -= 2)
        {
            _isRedColor = true;
            for (n2 = 2; n2 <= n1; n2 += 2)
            {
                SetConsoleColor();
                Console.Write("{0} ", n2);
            }
            Console.WriteLine();
        }
    }

    private static void SetConsoleColor()
    {
        if (_isRedColor)
        {
            Console.ForegroundColor = ConsoleColor.DarkRed;
            _isRedColor = !_isRedColor;
        }
        else
        {
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            _isRedColor = !_isRedColor;
        }
    }
        for (n1 = 2; n1 <= 18; n1++)
        {
            for (n2 = 2; n2 <= n1; n2++)
            {
                Console.Write("{0} ", n2);
                n2++;
            }
            n1++;
            Console.WriteLine();
        }
        for (n1 = 2; n1 <= 18; n1++)
        {
            for (n2 = 2; n2 <= 18 - n1; n2++)
            {
                Console.Write("{0} ", n2);
                n2++;
            }
            n1++;
            Console.WriteLine();
        }

你的问题很有趣,所以我做了一个尝试,想在这里与 working example in fiddle 分享我的发现,请注意我使用了一些额外的变量以及重命名现有变量希望它赢不误导你。请仔细阅读以下几行,如果您需要任何说明,请告诉我

int loopLimit = 18;
int outerLoopCounter, innerLoopCounter = 2, upperBoudIterator = 2;

// Top Triangle nested for loop
for (outerLoopCounter = 0; outerLoopCounter <= 18; outerLoopCounter++)
{
    innerLoopCounter = 2;
    while (innerLoopCounter <= upperBoudIterator)
    {
        if (innerLoopCounter <= loopLimit)
            Console.Write("{0} ", innerLoopCounter);               
        innerLoopCounter += 2;
    };
    if (innerLoopCounter > loopLimit)
        loopLimit -= 2;
    upperBoudIterator += 2;
    Console.WriteLine();
}

所以我尝试将其作为一项学术练习,下面是我的尝试。使用我在评论中提到的方法和 属性,你可以用一对 loop-nested-loop 来完成这个:

int max = 18;
int cursorX = 0;
int count, digits;

for (int i = 2; i <= max; i += 2)
{
    count = max - i + 1;
    digits = i.ToString().Length;
    Console.ForegroundColor = (i % 4 == 0) ? ConsoleColor.Red : ConsoleColor.Green;

    for (int y = 0; y < count; y++)
    {
        Console.SetCursorPosition(cursorX, y + (i / 2) - 1);
        Console.Write(i);
    }

    cursorX += digits + 1;
}

结果: