java 杨辉三角_JAVA实现杨辉三角的三种方式
一、前言
既然是实现杨辉三角,就要知道什么是杨辉三角。如下图,就是两种杨辉三角。
(1)等边形状的杨辉三角
(2)直角形状的杨辉三角
在知道这两种都是杨辉三角之后,我们就来实现利用java语言打印出杨辉三角。
二、杨辉三角的规律
第n行有n个数字.
每一行的开始和结尾数字都为1.
用二维数组表示就是a[i][0]=1; a[i][j]=1(当i==j时);
第n+1行的第i个数字等于第n行的i-1个数字加上第n行的i个数字。
用二维数组表示就是a[i+1][j]=a[i][j-1]+a[i][j];
三、代码部分
3.1、创建一个长度为10,宽度为10的二维数组,但赋值和输出时只输出杨辉三角那个范围的数
首先,我们得理解定义一个长度和高度都为10的二维数组时,他到底做了什么。
public class Test {
public static void main(String[] args) {
int [][] arr=new int [10][10];
for(int i=0;i
for(int j=0;j
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
输出图:
数组的图为可以看出,实际是给每个位置上都赋值为0;
而我们要做的是给A部分的位置赋值并且输出,而B部分的位置不用管。
A部分与B部分的区别在于:A部分的横坐标大于等于纵坐标。用数组中的话就是i<=j;知道要赋值的范围,那么for循环的语句就知道了啦,就为
for(int i=0;i
for(int j=0;j<=i;j++) {
}
}
第一种该方法完整代码:
public class YHSJ {
public static void main(String[] args) {
//定义了一个长度为10,高度为10的二维数组,数组中的值都为0;
int[][] arr=new int[10][10];
for(int i=0;i
//由于只是给杨辉三角内的位置赋值,所以是j<=i
for(int j=0;j<=i;j++) {
//根据规律,使用if else 赋值
if(j==0||j==i) {
arr[i][j]=1;
}else {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
/*由于只是输出杨辉三角范围内的值,所以在内层循环就输出,这种方法不能全部赋值完之后再输出
"\t"的原因是10和小于10的数组的宽度不同,所以使用\t制表符能使数与数之间距离相等
*/
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
对应效果图:
3.2、直接创建一个和杨辉三角形状一样的数组再赋值输出
在前面我们使用了一个长10高10的数组,但是最后我们只用了它的A部分,思考一下,为什么我们不直接创建一个和前面那个A部分形状一样的数组呢?
形状如下图:
知道基本的概念之后,我们先创建该数组,首先可以确定的是这里的高度还是为10,也就是横坐标最大还是为10,但是纵坐标就是小于等于该行的横坐标。
int[][] arr=new int[10][];
for(int i=0;i
arr[i]=new int[i+1];
}
在数组创建好之后,再就是赋值了,之前赋值用的是j<=i,但是此处数组的范围就是杨辉三角的范围,所以可以直接对数组进行内外两层循环。
for(int i=0;i
for(int j=0;j
}
}
而赋值的代码也是一样,不过这种方法就可以赋值完再输出,不用像第一种一样赋值时输出。
第二种方法完整代码:
public class YHSJ_2 {
public static void main(String[] args) {
int[][] arr=new int[10][];
for(int i=0;i
arr[i]=new int[i+1];
}
for(int i=0;i
for(int j=0;j
if(j==0 || i==j) {
arr[i][j]=1;
}else {
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
}
}
for(int i=0;i
for(int j=0;j
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
第二种补充说明:这里用这种是输出的一个直角三角形,但是在最后输出的时候加上一段就可以变成等腰三角形了;(但是由于制表符的问题,还是有一些不规范,觉得不好参考第三种)
public class YHSJ_2 {
public static void main(String[] args) {
int[][] arr=new int[10][];
for(int i=0;i
arr[i]=new int[i+1];
}
for(int i=0;i
for(int j=0;j
if(j==0 || i==j) {
arr[i][j]=1;
}else {
arr[i][j]=arr[i-1][j]+aarr[i-1][j-1];
}
}
}
for(int i=0;i
int num=(arr.length-i)/2;
for(int k=0;k<=num;k++) {
System.out.print("\t");
}
for(int j=0;j
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
3.3、接下来为大家介绍一种等边三角形输出的简单方法
代码:
public class YHSJ_1 {
public static void main(String[] args) {
int rows = 10;
for (int i = 0; i < rows; i++) {
int number = 1;
// 打印空格字符串
System.out.format("%" + (rows - i) * 2 + "s", "");
for (int j = 0; j <= i; j++) {
System.out.format("%4d", number);
number = number * (i - j) / (j + 1);
}
System.out.println();
}
}
}
重点在于那个number=number*(i-j)/(j+1),掌握了杨辉三角的作用。而关于System.out.format是一种类似于C语言中的输出,查看API即可知。
效果图:
java 杨辉三角_JAVA实现杨辉三角的三种方式相关推荐
- java base64 编码 类_java base64编码和解码的三种方式 | 学步园
方式一:使用commons-codec.jar /** * @param bytes * @return */ public static byte[] decode(final byte[] byt ...
- java反射获取实体类_java 反射获取类对象的三种方式
Java反射经常用到的就是获取对象中的属性,那么Java获取类对象就是必不可少的啦! Java实体类: public class ReflexModel { private String code; ...
- springboot:java实现邮件及附件发送、HTML正文的三种方式(一)【附带源码】
0. 引言 邮件发送是我们日常开发中比较常见的功能,常用于预警信息提醒.统计数据定期发送等需求.一般该方法会由前人封装好,实际开发时只需要调用即可,但具体怎么实现的,如何从零实现邮件发送,这是我们要掌 ...
- 对Java多线程编程的初步了解,实现多线程的三种方式以及多线程并发安全的线程同步机制
什么叫进程?什么叫线程? 进程相当于一个应用程序,线程就是进程中的一个应用场景或者说是一个执行单元,一个进程可以启动多个线程,每个线程执行不同的任务,一个线程不能单独存在,他必须是进程的一部分,当进程 ...
- java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...
- java 字符终端库_Java 字符终端上获取输入三种的方式分享
在java 字符终端上获取输入有三种方式: 1.java.lang.system.in (目前jdk版本均支持) 2.java.util.scanner (jdk版本>=1.5) 3.java. ...
- java中map类型_Java中Map类型遍历的两种方式对比
Java中Map类型是存储键值对数据的类型,在编程过程经常使用,进行遍历操作对于每个Java程序员都不会模式,下面总结两种常用的遍历方式(一种keySet,一种entrySet),通过对比让你明白使用 ...
- java跳出for循环_Java跳出多层for循环的4种方式
Java跳出多层for循环的4种方式 一.使用return关键字控制 for (int i = 0;i<10;i++){ for (int j = 0; j<10; j++) { if ( ...
- java中遍历集合_java中遍历ArrayList集合的四种方式
ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双向迭代器 ...
- web java获取当前时间_Java 获取当前系统时间的三种方法
准备工作: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; 方式一: /** ...
最新文章
- 数字语音信号处理学习笔记——语音信号的数字模型(2)
- iOS开发日记4-第三方登录(ShareSDK)
- input函数的基本使用
- 复制Oracle表的结构
- ICCV 2019丨基于跨视角信息融合的三维人体姿态估计
- AutoCompleteExtender智能扩展实例
- 实践 | 在MySql中,这四种方法可以避免重复插入数据!
- 黑苹果16g内存够用吗_现阶段最便宜的完美黑苹果配置是什么?
- 益智小游戏(app)
- 高通QFIL烧录错误求解
- 在Node.js中了解Hello World
- oracle := 和=,oracle中 =: 和 := 分别是什么意思?
- iOS签名校验那些事儿
- Apache PdfBox 2.0.X 版本解析PDF文档(文字和图片)
- 14-5 food poisoning
- 计算机无法与打印机建立,电脑无法与打印机连接 计算机网考题目2(6)
- 全新2022测算系统完整版+支持对接结
- PB中的timer事件
- 阿里云是如何实现云视频直播的?
- 亚洲小姐全球总冠军吴丹,《猎枭生死线》荧幕初吻超越柳岩徐冬冬
热门文章
- ECMAScript6 Proxy和Reflect 对象操作拦截以及自定义
- Python实现基于ClipCap的看图说话Image Caption模型
- jQuery类似QQ空间时间轴效果_事件展示时光轴js特效代码
- Centos7与Windows查看硬盘序列号
- java4android 教程_《Java4Android视频教程》学习笔记(三)
- 小说大纲模板在计算机的哪里,如何撰写小说大纲
- Pygame实战:牛,几千行代码实现《机甲闯关冒险游戏》,太牛了(保存起来慢慢学)
- 新一代HTAP数据库崛起,MySQL生态的最佳归宿?
- Visio画UML用例图
- 每日一题/002/微积分/变上限积分函数求导问题