1.杨辉三角部分性质
![](https://img.haomeiwen.com/i10802382/38cdf85a708af8f4.png)
a.每行端点与结尾数字为1
b.部分数等于他“肩膀”上数的和
c.第n行有n个数
2.思路介绍(JAVA为例)
分两步1.数组中存储如下
![](https://img.haomeiwen.com/i10802382/789e8fb5c62b281c.png)
2.打印出如下
![](https://img.haomeiwen.com/i10802382/7055b9439532801f.png)
3.代码详解(最下方有完整代码)
i. 首先实例化一个数组
- 观察思路介绍中步一的数列:
a.行列相同(以6行为例)
int row=6;//行数,列数
注意:每行的列数都不要相同,因为数组初始化为0,打印效果不好
int[][] Pascal_Triangle = new int[row][];
for (int i=0;i<row;i++){//分配每行空间
Pascal_Triangle [i]=new int[i+1];
}
ii.为数组赋值
- 因为每行列数不同,每打印一个数字
j++
n行打印n个数,当列>行时j>i
完成,后直接state=row+1
跳出循环 - 用try catch语句捕获异常,当他肩膀上没有数字时,即为边界数
for (int i=0;i<row;i++){
for (int j=0;j<row;j++){
if (i<j){
j=row;
continue;
}
try{
Pascal_Triangle [i][j]=Pascal_Triangle [i-1][j]+Pascal_Triangle [i-1][j-1];
}catch (Exception e){
Pascal_Triangle [i][j]=1;
continue;
}
}
}
iii.调整输出
-
观察下图:(每个数后加了空格)
A.行数同列翻倍,即n行2n列
B.第一行所在列为n列,即(1,n)
C.从第一行往下,没下一行少一空格
图片.png
for (int i=0;i<row;i++){
for (int k=0;k<row-1*i;k++){
System.out.print(" ");
}//每行前空格
for (int j=0;j<2*row;j++){
try{
System.out.print(Pascal_Triangle [i][j]);
System.out.print(" ");
}catch (Exception e){
continue;
}
}
System.out.println();
}
4.完整代码
public class Demo15 {
public static void main(String[] args) {
int row=6;//行数,列数
int[][] Pascal_Triangle = new int[row][];
for (int i=0;i<row;i++){//分配每行空间
Pascal_Triangle [i]=new int[i+1];
}
for (int i=0;i<row;i++){
for (int j=0;j<row;j++){
if (i<j){
j=row;
continue;
}
try{
Pascal_Triangle [i][j]=Pascal_Triangle [i-1][j]+Pascal_Triangle [i-1][j-1];
}catch (Exception e){
Pascal_Triangle [i][j]=1;
continue;
}
}
}
for (int i=0;i<row;i++){
for (int k=0;k<row-1*i;k++){
System.out.print(" ");
}//每行前空格
for (int j=0;j<2*row;j++){
try{
System.out.print(Pascal_Triangle [i][j]);
System.out.print(" ");
}catch (Exception e){
continue;
}
}
System.out.println();
}
}
}
网友评论