动态格式化版杨辉三角输出:
-----------------------------------------------------------------------------------
public class Test {
private static int level = 10; // 想输出多少行就修改这个数
public static void main(String[] args) {
int[][] arrays = new int[level][level];
int max = 0;
arrays[0][0] = 1;
for (int i = 1; i < level; i++) {
arrays[i][0] = 1;
for (int j = 1; j < i; j++) {
arrays[i][j] = arrays[i - 1][j - 1] + arrays[i - 1][j];
if (arrays[i][j] > max)
max = arrays[i][j];
}
arrays[i][i] = 1;
}
StringBuilder sb = new StringBuilder();
int maxWidth = String.valueOf(max).replaceAll("\\d", " ").length();
maxWidth += maxWidth % 2 == 0 ? 2 : 3;
String bitSpace = space(maxWidth / 2, " ");
for (int i = 0; i < level; i++) {
sb.append(space(level - i - 1, bitSpace));
for (int j = 0; j <= i; j++) {
int width = String.valueOf(arrays[i][j]).length();
int before = (maxWidth - width) / 2;
int after = maxWidth - before - width;
sb.append(String.format("%" + before + "s%d%" + after + "s", " ", arrays[i][j], " "));
}
sb.append("\n");
}
System.out.print(sb.toString());
}
private static String space(int length, String space) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++)
sb.append(space);
return sb.toString();
}
}
----------------------------------------------------------
5行输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
10行情况:
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 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
15行输出:
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 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
---------------------------
HTML中显示的空格和数字不一定是一个宽度,本代码在Eclipse中输出是绝对整齐的。
for(循环){
out.println("数字");
}
就输出了
public class YanghuiTriangle {
public static void main(String[] args){
display(10);
}
private static void display(int n){
// 初始化二维数组
int[][] arr=new int[n][n];
// 左边及对角线赋初值1
for(int i=0;i
arr[i][i]=1;
}
// 下方的数等于左上方和正上方两数之和
for(int i=2;i
}
}
// 显示数组
for(int i=0;i
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}