1 class Program
2 {
3 static void Main(string[] args)
4 {
5 /*
6 * 杨辉三角
7 */
8 int row;
9 Console.WriteLine("请输入行数:");
10 string nRow = Console.ReadLine();
11 if (!int.TryParse(nRow, out row))
12 {
13 Console.WriteLine("只能接受整数");
14 return;
15 }
16 if (row <= 0)
17 {
18 Console.WriteLine("只能接受正整数");
19 return;
20 }
21
22 //计算最后一行总字符数
23 string temp = string.Empty;
24 for (int i = 0; i < row; i++)
25 {
26 temp += GetValue(row, i).ToString();
27 }
28 int charNum = (row - 1) * 3 + temp.Length;
29
30 Console.WriteLine("总字符数:"+charNum);
31 Console.WriteLine();
32
33 //控制行
34 for (int i = 0; i < row; i++)
35 {
36 //控制列数字
37 for (int m = 0; m < i+1; m++)
38 {
39 if (m == 0) //第一列前的空格
40 {
41 int b = -1;
42 if (i == 0) //第一行
43 b = (charNum - 1) / 2;
44 else if (i < row - 1 && i != 0) //不是最后一行
45 {
46 //上一行字符数
47 string tempUpRow = string.Empty;
48 for (int l = 1; l < i + 1; l++)
49 {
50 tempUpRow += GetValue(i - 1, l - 1);
51 }
52 //当前行字符数
53 string tempNowRow=string.Empty;
54 for (int p = 0; p < i+1; p++)
55 {
56 tempNowRow += GetValue(i, p).ToString();
57 }
58 //每行前需要的空格数
59 b = (charNum - tempNowRow.Length - tempUpRow.Length - i * 2) / 2;
60 }
61 //每行前的空格
62 for (int k = 0; k < b; k++)
63 {
64 Console.Write(" ");
65 }
66 }
67 else //不是第一个字符前需要的空格数
68 {
69 string oldTemp = GetValue(i - 1, m - 1).ToString();
70 for (int k = 0; k < oldTemp.Length + 2; k++)
71 {
72 Console.Write(" ");
73 }
74 }
75
76 //输出结果
77 Console.Write(GetValue(i, m));
78
79 }
80 Console.WriteLine();
81 }
82 }
83
84 /// <summary>
85 /// 计算第n行的第j个字符
86 /// </summary>
87 /// <param name="n">第n行(从0开始)</param>
88 /// <param name="j">第j个数字</param>
89 /// <returns>计算结果</returns>
90 private static int GetValue(int n, int j)
91 {
92 if (j == 0 || j == n)
93 return 1;
94
95 return GetValue(n - 1, j - 1) + GetValue(n - 1, j);
96 }
97 }
2 {
3 static void Main(string[] args)
4 {
5 /*
6 * 杨辉三角
7 */
8 int row;
9 Console.WriteLine("请输入行数:");
10 string nRow = Console.ReadLine();
11 if (!int.TryParse(nRow, out row))
12 {
13 Console.WriteLine("只能接受整数");
14 return;
15 }
16 if (row <= 0)
17 {
18 Console.WriteLine("只能接受正整数");
19 return;
20 }
21
22 //计算最后一行总字符数
23 string temp = string.Empty;
24 for (int i = 0; i < row; i++)
25 {
26 temp += GetValue(row, i).ToString();
27 }
28 int charNum = (row - 1) * 3 + temp.Length;
29
30 Console.WriteLine("总字符数:"+charNum);
31 Console.WriteLine();
32
33 //控制行
34 for (int i = 0; i < row; i++)
35 {
36 //控制列数字
37 for (int m = 0; m < i+1; m++)
38 {
39 if (m == 0) //第一列前的空格
40 {
41 int b = -1;
42 if (i == 0) //第一行
43 b = (charNum - 1) / 2;
44 else if (i < row - 1 && i != 0) //不是最后一行
45 {
46 //上一行字符数
47 string tempUpRow = string.Empty;
48 for (int l = 1; l < i + 1; l++)
49 {
50 tempUpRow += GetValue(i - 1, l - 1);
51 }
52 //当前行字符数
53 string tempNowRow=string.Empty;
54 for (int p = 0; p < i+1; p++)
55 {
56 tempNowRow += GetValue(i, p).ToString();
57 }
58 //每行前需要的空格数
59 b = (charNum - tempNowRow.Length - tempUpRow.Length - i * 2) / 2;
60 }
61 //每行前的空格
62 for (int k = 0; k < b; k++)
63 {
64 Console.Write(" ");
65 }
66 }
67 else //不是第一个字符前需要的空格数
68 {
69 string oldTemp = GetValue(i - 1, m - 1).ToString();
70 for (int k = 0; k < oldTemp.Length + 2; k++)
71 {
72 Console.Write(" ");
73 }
74 }
75
76 //输出结果
77 Console.Write(GetValue(i, m));
78
79 }
80 Console.WriteLine();
81 }
82 }
83
84 /// <summary>
85 /// 计算第n行的第j个字符
86 /// </summary>
87 /// <param name="n">第n行(从0开始)</param>
88 /// <param name="j">第j个数字</param>
89 /// <returns>计算结果</returns>
90 private static int GetValue(int n, int j)
91 {
92 if (j == 0 || j == n)
93 return 1;
94
95 return GetValue(n - 1, j - 1) + GetValue(n - 1, j);
96 }
97 }