如何并排显示4个三角形图案

我无法将4种不同的三角形图案并排显示。 这是一个控制台应用程序。

这正是我试图通过使用嵌套for循环来实现的:

* ******************** * ** ********* ********* ** *** ******** ******** *** **** ******* ******* **** ***** ****** ****** ***** ****** ***** ***** ****** ******* **** **** ******* ******** *** *** ******** ********* ** ** ********* *********** *********** 

我已经有了各自的模式,但当然它们一个接一个地出现。

 using System; class Assignment5 { static void Main() { for (int i = 1; i <= 10; i++) // Outer loop for number of rows { for (int j = 1; j = 1; i--) // Outer loop for number of rows { for (int j = 1; j = 1; i--) // Outer Loop for number of rows { for (int j = 1; j <= 10 - i; j++) //Inner loop for number of spaces { Console.Write(" "); } for (int k = 1; k <= i; k++) //Secondary inner loop for number of stars { Console.Write("*"); } Console.WriteLine(); } // End Third Pattern for (int i = 1; i <= 10; i++) //Outer Loop for number of rows { for (int j = 1; j <= 10 - i; j++) //Inner loop for number of spaces { Console.Write(" "); } for (int k = 1; k <= i; k++) //Secondary inner loop for number of stars { Console.Write("*"); } Console.WriteLine(); } // End Fourth Pattern Console.WriteLine("Press Enter for Part 2 of this Program"); Console.ReadKey(); Console.Clear(); } // End main function } // End class Assignment5 

您没有指定要实现的方式,因此我向您介绍:

  private static void Main() { Console.WriteLine( @"* ******************** * ** ********* ********* ** *** ******** ******** *** **** ******* ******* **** ***** ****** ****** ***** ****** ***** ***** ****** ******* **** **** ******* ******** *** *** ******** ********* ** ** ********* *********** ***********"); } 

[编辑]好的,这是一个不那么滑稽的答案。 ;)

 int n = 10; for (int i = 0; i < n; ++i) { for (int j = 0; j <= i; ++j) Console.Write("*"); for (int j = 0; j < ni-1; ++j) Console.Write(" "); for (int j = 0; j < ni; ++j) Console.Write("*"); for (int j = 0; j < 2*i; ++j) Console.Write(" "); for (int j = 0; j < ni; ++j) Console.Write("*"); for (int j = 0; j < ni-1; ++j) Console.Write(" "); for (int j = 0; j <= i; ++j) Console.Write("*"); Console.WriteLine(); } 

[第二次编辑]

编写输出n星或空格的方法会更具可读性,如下所示:

 static void stars(int count) { for (int i = 0; i < count; ++i) Console.Write("*"); } static void spaces(int count) { for (int i = 0; i < count; ++i) Console.Write(" "); } 

然后:

 int n = 10; for (int i = 0; i < n; ++i) { stars(i+1); spaces(ni-1); stars(n-i+1); spaces(2*i); stars(ni); spaces(ni-1); stars(i+1); Console.WriteLine(); } 

这是你的脑筋急转弯。

 for (int n = 10; n > 0; n--) { var tri = "".PadRight(11 - n, '*').PadRight(10, ' ') + "".PadRight(n, '*').PadRight(10, ' '); Console.WriteLine(tri + String.Join("", tri.ToCharArray().Reverse())); } 

输出:

 * ******************** *
 ** ********* ********* **
 *** ******** ******** ***
 **** ******* ******* ****
 ***** ****** ****** *****
 ****** ***** ***** ******
 ******* **** **** *******
 ******** *** *** ********
 ********* ** ** *********
 *********** ***********

这将为您提供所需的结果。

 using System.IO; using System; class Program { static void Main() { for (int i = 1; i <= 10; i++) // Outer loop for number of rows { for (int j = 1; j <= i; j++) { Console.Write("*"); } for (int k = 10; k >= i; k--) { Console.Write(" "); } for (int l = 10-i; l >= 0; l--) { Console.Write("*"); } for (int k = 0; k <= i*2; k++) { Console.Write(" "); } for (int k = 10-i; k >= 0; k--) { Console.Write("*"); } for (int k = 10; k >= i; k--) { Console.Write(" "); } for (int j = 1; j <= i; j++) { Console.Write("*"); } Console.WriteLine(); } Console.ReadKey(); Console.Clear(); } } 
 using System; namespace ConsoleApplication1 { internal class Program { private static void Main(string[] args) { int length = 10; for (int i = 0; i < length; i++) { string result = String.Format("{0}{1}{2}{3}", fillWithStarFromLeft(i + 1, length), fillWithStarFromLeft(length - i, length), fillWithStarFromRight(length - i, length), fillWithStarFromRight(i + 1, length) ); Console.WriteLine(result); } Console.ReadKey(); } private static object fillWithStarFromRight(int length, int segmentlength) { string result = String.Empty; for (int i = 0; i < length; i++) { result += "*"; } return result.PadLeft(segmentlength, ' '); } private static string fillWithStarFromLeft(int length, int segmentlength) { string result = String.Empty; for (int i = 0; i < length; i++) { result += "*"; } return result.PadRight(segmentlength, ' '); } } } 

只是一个快速但希望它有所帮助

您正在使用在当前光标位置写入的Console.WriteConsole.WriteLine命令。 你的循环总是在10 * 10字符范围内工作,然后是换行符。

解决问题的方法是绝对光标位置,将光标设置到正确的位置,然后绘制一个字符。 每个后续三角形必须移动一个偏移量:

 int leftOffset = 0; // draw first triangle for x in ... for y in ... Console.SetCursorPosition(x, y); Console.Write("*"); leftOffset += 10; // draw second triangle for x in ... for y in ... Console.SetCursorPosition(x + leftOffset, y); Console.Write("*"); . . . 

在开始之前一定要清洁控制台!

另一个解决方案:创建一个包含所有’*’的数组,然后显示它。

我使用了三维数组:行,列,模式编号。
我甚至已经将所有内容都移到了0 请注意,我甚至填充数组的“空白”空格。

 static void Main() { var chars = new char[10, 10, 4]; for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j < 10; j++) { if (i >= j) { chars[i, j, 0] = '*'; } else { chars[i, j, 0] = ' '; } } } // End First Pattern for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j < 10; j++) { if (i <= 9 - j) { chars[i, j, 1] = '*'; } else { chars[i, j, 1] = ' '; } } } // End Second Pattern for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j < 10; j++) { if (i <= j) { chars[i, j, 2] = '*'; } else { chars[i, j, 2] = ' '; } } } // End Third Pattern for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j < 10; j++) { if (i >= 9 - j) { chars[i, j, 3] = '*'; } else { chars[i, j, 3] = ' '; } } } // End Fourth Pattern for (int i = 0; i < 10; i++) { for (int k = 0; k < 4; k++) { for (int j = 0; j < 10; j++) { Console.Write(chars[i, j, k]); } } Console.WriteLine(); } Console.WriteLine("Press Enter for Part 2 of this Program"); Console.ReadKey(); Console.Clear(); } // End main function 

正如我告诉过你的那样,我在数组创建过程中用空格填充空白空间。 我本可以跳过它,而是在Console.Write中用' '替换chars[i, j, k] == 0的空格,如:

 static void Main() { var chars = new char[10, 10, 4]; for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j < 10; j++) { if (i >= j) { chars[i, j, 0] = '*'; } } } // End First Pattern for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j < 10; j++) { if (i <= 9 - j) { chars[i, j, 1] = '*'; } } } // End Second Pattern for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j < 10; j++) { if (i <= j) { chars[i, j, 2] = '*'; } } } // End Third Pattern for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j < 10; j++) { if (i >= 9 - j) { chars[i, j, 3] = '*'; } } } // End Fourth Pattern for (int i = 0; i < 10; i++) { for (int k = 0; k < 4; k++) { for (int j = 0; j < 10; j++) { if (chars[i, j, k] != 0) { Console.Write(chars[i, j, k]); } else { Console.Write(' '); } } } Console.WriteLine(); } Console.WriteLine("Press Enter for Part 2 of this Program"); Console.ReadKey(); Console.Clear(); } // End main function 

从那里我们可以删除if并使它们成为for一部分,但它变得非常难以理解......

 static void Main() { var chars = new char[10, 10, 4]; for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j <= i; j++) { chars[i, j, 0] = '*'; } } // End First Pattern for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 0; j < 10 - i; j++) { chars[i, j, 1] = '*'; } } // End Second Pattern for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = i; j < 10; j++) { chars[i, j, 2] = '*'; } } // End Third Pattern for (int i = 0; i < 10; i++) // Outer loop for number of rows { for (int j = 9 - i; j < 10; j++) { chars[i, j, 3] = '*'; } } // End Fourth Pattern for (int i = 0; i < 10; i++) { for (int k = 0; k < 4; k++) { for (int j = 0; j < 10; j++) { if (chars[i, j, k] != 0) { Console.Write(chars[i, j, k]); } else { Console.Write(' '); } } } Console.WriteLine(); } Console.WriteLine("Press Enter for Part 2 of this Program"); Console.ReadKey(); Console.Clear(); } // End main function 

试试这个(很短的版本)

 int sz=10; for (int i=0;i=sz && j<=(sz*2)-(i+1)) || (j>=sz*2 && j>=(sz*2)+i && j=(sz*4)-(i+1)) ) { Console.Write("*"); } else {Console.Write(" ");} } Console.WriteLine(); } 

在这里输入(未测试)。 但这可能会成功!