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

java打印可对齐的任意层数的杨辉三角形

2016-02-28 02:09 603 查看
package 打印杨辉三角;

/**
*
* @author zjluoc
*
*/
public class YangHuiTriangle {
public static void main(String args[]) {
printYangHuiTriangle(15);
}

/**
* 打印对应层数lines的杨辉三角形
*
* @param lines
*            层数
*/
public static void printYangHuiTriangle(int lines) {
// 首先定义一个二维数组用于存储每一层对应行列的数值
long a[][] = new long[lines][lines];
// 接着定义每一层首位和末尾均为1,此处for循环给边界赋值“1”。
for (int i = 0; i < lines; i++) {
a[i][0] = a[i][i] = 1;
}
// 接着计算从第三层开始那些由肩部两端相加的和
for (int i = 2; i < lines; i++) {// 控制层从第三层到最后一层,2~lines-1
for (int j = 1; j < i; j++) {// 每一层除去首尾2个数,只有(i+1)-2个数需要计算,说明j最大值为i-1
// 计算肩部数字之和
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
// 进行到这里已经计算好了每层的数字,现在下面开始对其进行塑造三角形形状
int printSpaceNumber[] = countSpaceLength(a);
for (int i = 0; i < lines; i++) {
// 打印能居中对齐的空格
for (int k = 0; k < printSpaceNumber[i]; k++) {
System.out.print(" ");
}
for (int j = 0; j <= i; j++) {
System.out.print(a[i][j] + "         ");
}
// 每层之后换行
System.out.println();
}

}

private static int[] countSpaceLength(long[][] a) {
int numberLenthSum = 0;
int spaceLenthSum = 0;
int stringlength[] = new int[a.length];// 存储计算出来的每一层数字字符串+" "的字符长度
for (int i = 0; i < a.length; i++) {
for (int j = 0; j <= i; j++) {
// 计算每层数字转换为字符串后长度之和
numberLenthSum += String.valueOf(a[i][j]).length();
}
// 计算该一层空格长度之和
spaceLenthSum = (i + 1) * ("         ").length();
// 将该一层的字符串长度赋值给length[]最后一位
stringlength[i] = numberLenthSum + spaceLenthSum;
// 再次累积前需要清零
numberLenthSum = spaceLenthSum = 0;
// System.out.println("第"+(i+1)+"层总长为:"+stringlength[i]);
}
// 现在需要动态计算每一层前面空格数量
int printSpaceNumber[] = new int[a.length];
for (int i = 0; i < stringlength.length; i++) {
//计算每一层以最低层居中所需的空格数量
printSpaceNumber[i] = (stringlength[stringlength.length - 1] - stringlength[i]) / 2;
// System.out.println("第"+(i+1)+"层需要打印的空格数量为:"+printSpaceNumber[i]);
}
return printSpaceNumber;
}

}

这是打印10层的杨辉三角截图:



附上完整eclipse代码包下载地址:http://download.csdn.net/detail/zjluocisoftstone/9446388

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