Java温故而知新-杨辉三角形
来源:互联网 发布:sql server 物化视图 编辑:程序博客网 时间:2024/06/05 20:04
Java温故而知新-杨辉三角形
一、
先说需求
需求 打印输出杨辉三角形,行数可变,支持50行内的任意数。
预期结果如图所示
1 这是第几行呢,是第11 1 这是第几行呢,是第21 2 1 这是第几行呢,是第31 3 3 1 这是第几行呢,是第41 4 6 4 1 这是第几行呢,是第51 5 10 10 5 1 这是第几行呢,是第61 6 15 20 15 6 1 这是第几行呢,是第71 7 21 35 35 21 7 1 这是第几行呢,是第81 8 28 56 70 56 28 8 1 这是第几行呢,是第91 9 36 84 126 126 84 36 9 1 这是第几行呢,是第10
二、思路
1、看到这种二维平面打印的需求,我就明白这应该会用双层嵌套循环去解决。
首先可以观察出,第一行1个元素,第二行2个,第n行n个元素,那么就简单了,做一个外层循环去控制打印哪一行,利用行数去控制内层循环打印几个元素,这样循环边界都找出来了。
外层是0到n-1
内层也是0到n-1
两个都是一样的便捷,但是含义大有不同,外层是去控制行数,内层的是去控制行内元素个数。
for(int i = 0;i < arr.length;i++){ for(int j =0;j < i+1;j++){ } }
2、现在该观察行内元素的特点了,首先会发现首位都是1,这个很显然。
非首尾元素的值,他的值是他上一行中,同列的值和前一列的值的和,那么也很好确认了。
如何去实现这个逻辑呢?挑选一个判断语句吧,当然是ifelse语句了。
首位比较好判断,那就让符合首位的位置是1,其他的位置都去辛苦的求和吧。
if(j == 0||j == i){ arr[i][j] = 1; }else arr[i][j] = arr[i-1][j-1] +arr[i-1][j]; //头顶上的元素和他前面的元素之和
3、接下来就是实际编码阶段了。有一个要注意的点就是数组的初始化。
第一要在使用二维数组前初始化数组
// 初始化一个二维数组,作为计算基础,暂定有10行 int[][] arr = new int[10][];
第二要在内层循环操作第二维数组时对第二维数组进行初始化,这个是我在洗手间突然恍然大悟的。
// 初始化内层数组arr[i] = new int[i+1]; //这个一维数组的元素就是一个个数组
4、接下来放源码,可以打印1行到10行的杨辉三角形。注释比较多,习惯于把思路构建好再去编码。
package com.chapter.four;/** * 这是4.5.2 的范例2 * 需求 打印输出杨辉三角形 * 思路1 观察杨辉三角形,发现三角形的两边都是1,中间的数都是上一行数对应列与前一列的和 * 2最关键的是第几行就有几个数字 * 3这种平面打印多行的游戏,双层嵌套循环,最常用的就是二维数组了 * 4只要依次求出每一行的数组元素,那么下一行的和元素就可以得到,两边的1特殊处理一下 * * @author huxingyue * */class YanghuiTriangle { public static void main(String[] args) { // TODO Auto-generated method stub// 初始化一个二维数组,作为计算基础,暂定有10行 int[][] arr = new int[10][];// 构造一个双层循环,第一层遍历行数,就是这里的10,// 注意arr.length这里指的是第一层的长度 for(int i = 0;i < arr.length;i++){// 初始化内层数组 arr[i] = new int[i+1]; //这个一维数组的元素就是一个个数组 for(int j =0;j < i+1;j++){ if(j == 0||j == i){ arr[i][j] = 1; }else arr[i][j] = arr[i-1][j-1] +arr[i-1][j];//头顶上的元素和他前面的元素之和 System.out.print(arr[i][j]+"\t"); } System.out.println("这是第几行呢,是第"+arr[i].length); } }}
类似的题目还有打印空心菱形,都是练习循环结构的题目。、
空心菱形
0 0
- Java温故而知新-杨辉三角形
- java 杨辉三角形
- Java — 杨辉三角形
- Java打印杨辉三角形
- [JAVA].FirstStep 杨辉三角形
- 蓝桥杯 杨辉三角形 java
- JAVA蓝桥杯:杨辉三角形
- 温故而知新:Java volatile 关键字
- 温故而知新-快速排序(JAVA)
- 温故而知新-----一、Java常识
- Java温故而知新-空心菱形
- Java温故而知新-插入排序
- Java实例23 - 打印杨辉三角形
- Java中打印杨辉三角形
- java 基础练习 杨辉三角形
- [BASIC-6]-杨辉三角形-(java)
- 蓝桥杯-杨辉三角形(java)
- 蓝桥杯 基础练习 杨辉三角形 JAVA
- servlet-环境
- Android 6.0 最简单的权限获取方法 RxPermition EasyPermition
- Java byte数据类型
- oc中的枚举
- orcale数据库的简单操作语句
- Java温故而知新-杨辉三角形
- [c++]求两个正整数的最大公约数
- Java short数据类型
- 【LeetCode】508. Most Frequent Subtree Sum
- 递推递归练习 G
- JS保存 读取 删除cookie
- Java char数据类型
- vim常用命令
- Ubuntu14.04通过Eclipse编译UHD源码