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
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树