您的位置:首页 > 编程语言 > Java开发

三种方式打印杨辉三角形(JAVA实现)

2017-11-17 12:27 232 查看
 

1 //采用一个二维数组打印杨辉三角
2 class Yanghui1 {
3   public static void main(String[] args)
4   {
5     //设置杨辉三角的行数
6     int num = 10;
7
8     //申请二维数组存放杨辉三角数值
9     int[][] yangHui = new int [num][];
10     for(int i = 0; i < yangHui.length; i ++)
11       yangHui[i] = new int[i + 1];
12
13     //利用杨辉三角的计算公式,初始化数组
14     for(int i = 0; i < yangHui.length; i ++)
15       for(int j = 0; j < yangHui[i].length; j ++)
16       {
17         //每一行第一个数和最后一个数都为1
18         yangHui[i][0] = yangHui[i][i] = 1;
19
20         if(i > 1 && j > 0 && j < i)
21           //杨辉三角的值等于其上一层两个值之和
22           yangHui[i][j] = yangHui[i - 1][j] + yangHui[i -1][j -1];
23       }
24
25     //遍历数组,以输出
26     for(int i = 0; i < yangHui.length; i ++)
27     {
28       for(int j = 0; j < (num - i - 1) / 2; j ++)
29         System.out.print("\t");
30       for(int j = 0; j < yangHui[i].length; j ++)
31         System.out.print(yangHui[i][j] + "\t");
32
33       System.out.println();
34     }
35   }
36
37 }
38
39 //采用两个一维数组打印杨辉三角
40 class YangHui2
41 {
42   public static void main(String[] args)
43   {
44     int num = 20;
45
46     //申请UP数组用以存储上一层的数据
47     int[] up = new int[num];
48     for(int i = 0; i <= num; i ++)
49     {
50       //申请a数组用以存放本层的运算结果
51       int[] a = new int[i];
52       for(int j = 0; j < i; j ++)
53       {
54         //将本层第一个和最后一个数值赋值为1
55         if(j == 0 || j == i)
56           a[j] = up[j] = 1;
57
58         //当从第三行起,非首尾数字的值等于上方两数只和
59         if(i > 2 && j !=0 && j != i )
60           a[j] = up[j - 1] + up[j];
61       }
62
63       //将本层的运算结果存到up数组中,以供一下次运算使用
64       for(int k = 0; k < i; k ++)
65         up[k] = a[k];
66
67       //打印本层数字
68       for(int k = 0; k < (num - i - 1) / 2; k ++)
69         System.out.print("\t");
70       for(int k = 0; k < i; k ++)
71         System.out.print(a[k] + "\t");
72
73       System.out.println();
74     }
75   }
76 }
77
78 //采用一个一维数组打印杨辉三角
79 class YangHui3
80 {
81   public static void main(String[] args)
82   {
83     int num = 10;
84
85     //申请数组存放杨辉三角的数值
86     int yangHui[] = new int[(1 + num) * num / 2];
87     for(int i = 0; i < num; i ++)
88     {
89       for(int j = 0; j < (num - i - 1) / 2; j ++)
90         System.out.print("\t");
91
92       //temp表示已经存储的数字个数
93       int temp = (1 + i) * i / 2;
94       for(int j = 0; j <= i; j ++)
95       {
96           //每一层的首尾数值为1
97         if(j == 0 || j == i)
98           yangHui[temp + j] = 1;
99
100         else
101             //非首尾数值为上面两数之和
102           yangHui[temp + j] = yangHui[temp + j - i] + yangHui[temp + j - i - 1];
103           System.out.print(yangHui[temp + j] + "\t");
104       }
105     }
106     System.out.println();
107   }
108 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: