杨辉三角【Java】
2016-03-02 19:47
302 查看
package com.alg.mathproblem; import java.util.Scanner; /** * 杨辉三角 * 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 * @author Administrator * */ public class ExecuteThree { public static void main(String[] args) { System.out.println("显示层数:"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); showThree(n); } /** * * @param n */ private static void showThree(int n) { ///计算需要的数组长度 int len = n * (n + 1) / 2; int a[] = new int[len]; ///默认层数以及初始化起点a[0]=1 int level = 1; a[0] = 1; ///每一层的起始点(start)和终结点(end) int end = 0; int start = 0; ///指针类型point 用于指向a[point],from start to end int point = 0; ///flag 用于表示1作为每一层的数据的初始化项 boolean flag = false; for (int i = 0; i < len; i++) { ///数据进入新的一层,重新计算开始点start 和 结束点 end ///然后重新赋值 a[start] 和 a[point] ///指针point 从 start 开始 ///初始化内容 要通过flag关闭 if (!flag) { end = (level + 1) * level / 2 - 1; start = end - level + 1; a[start] = 1; a[end] = 1; point = start; flag = !flag; } ///当前层计算结束,开启下一层数据计算level 和 开启初始化门阀flag if (point == end) { flag = !flag; level++; } else { ///如果是当前起始项,因为初始化已经赋值,直接指向下一项进行计算,跳过该项计算 if (point == start) { point++; continue; } ///算法核心,中间的数目,出去start 和 end ,是上面的计算参数之和 a[point] = a[point - level] + a[point - level + 1]; point++; } } flag = false; for (int i = 0; i < len; i++) { if (a[i] == 1 && flag || i == 0) { System.out.println(a[i] + " "); flag = false; } else { System.out.print(a[i] + " "); flag = true; } } } }
相关文章推荐
- Spring--quartz中cronExpression配置说明
- Java中的继承,重写与遮蔽
- java类加载器总结
- java内存分配和String类型的深度解析
- Java中equals与== 的区别
- java操作数据库小工具--韩顺平SqlHelper
- maven 工程启动找不到 Spring ContextLoaderListener 的解决办法
- spring mvc 项目 相关配置文件小结
- java中Class对象详解
- Leetcode:235. Lowest Common Ancestor of a Binary Search Tree(JAVA)
- Eclipse中如何开启Assert断言
- Java内存访问重排序笔记
- Java虚拟机类加载过程
- Java中的大数字操作
- HDU 1016(Java) 好大一个坑!!!
- Spring Cache
- 用Struts2来完成一个学生注册界面
- 白话Spring(基础篇)---bean的作用域
- [转]Eclipse:Cannot complete the install because of a conflicting dependency
- java并发编程 Lock