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 }

 

posted on 2010-04-27 17:01  林博然  阅读(508)  评论(0)    收藏  举报