【问题标题】:C# Number Triangle Ascending and Descending by 2C# 数字三角形升序和降序 2
【发布时间】:2017-06-24 07:14:48
【问题描述】:
我找到了一种使用嵌套 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
【问题讨论】:
标签:
c#
for-loop
nested-loops
【解决方案1】:
所以我尝试将此作为一项学术练习,这是我的尝试。使用我在 cmets 中提到的方法和属性,您可以使用单个循环嵌套循环对来完成:
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;
}
结果:
【解决方案2】:
您的问题很有趣,所以我尝试了一下,想在这里与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();
}
【解决方案3】:
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();
}
【解决方案4】:
底部三角形部分:
// 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;
}
}