1.杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
可以先把上面杨辉三角的等腰三角形去掉空格变形为直角三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
然后把上面的数字变成* 打印
for (int i = 0; i <= 8; i++) {
for (int j = 0; j < i; j++) {
System.out.print("* ");
}
System.out.println();
}
再把*变成数字1
for (int i = 0; i <= 8; i++) {
for (int j = 0; j < i; j++) {
System.out.print("1 ");
}
System.out.println();
}
再把数字保存到二维数组
int[][] arr = new int[8][];
for (int i = 0; i < arr.length; i++) {
//每一个一维数组的长度都是前一个+1
arr[i] = new int[i+1];
for (int j = 0; j < i+1; j++) {
//赋值
arr[i][j] = 1;
}
System.out.println();
}
//遍历二维数组
for (int[] ints : arr) {
System.out.println(Arrays.toString(ints));
}
再修改一维数组元素的值
/*
[1]
[1 1]
[1 2 1]
[1 3 3 1]
[1 4 6 4 1]
[1 5 10 10 5 1]两条边除外:arr[i][j] = arr[i-1][j-1] + arr[i-1][j]
两条边:1
*/
int[][] arr = new int[8][];
for (int i = 0; i < arr.length; i++) {
//每一个一维数组的长度都是前一个+1
arr[i] = new int[i+1];
for (int j = 0; j < i+1; j++) {
//赋值
if(j==0 || i==j){
arr[i][j] = 1;
}else {
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
System.out.println();
}
//遍历二维数组
for (int[] ints : arr) {
System.out.println(Arrays.toString(ints));
}
再加入空格以及去掉[]和,
int[][] arr = new int[13][];
for (int i = 0; i < arr.length; i++) {
//每一个一维数组的长度都是前一个+1
arr[i] = new int[i+1];
for (int j = 0; j < i+1; j++) {
//赋值
if(j==0 || i==j){//j==0 表示第一列的数 i==j 表示一行中最后一个数
arr[i][j] = 1;
}else {
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
}
//打印
for (int i = 0; i < arr.length; i++) {
//打印空格
for (int j = 0; j < arr.length - 1 - i; j++) {
System.out.print("\t");
}
//打印数字
for (int k = 0; k <arr[i].length ; k++) {
//System.out.printf("%2d\t\t",arr[i][k]);
System.out.print(arr[i][k]+"\t\t");
}
//换行
System.out.println();
}