JAVA实现杨辉三角的三种方式

一、前言

既然是实现杨辉三角,就要知道什么是杨辉三角。如下图,就是两种杨辉三角。

(1)等边形状的杨辉三角

(2)直角形状的杨辉三角

在知道这两种都是杨辉三角之后,我们就来实现利用java语言打印出杨辉三角。

二、杨辉三角的规律

  1. n行有n个数字.
  2. 每一行的开始和结尾数字都为1.

用二维数组表示就是a[i][0]=1;  a[i][j]=1(i==j)

  1. 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<arr.length;i++) {
			for(int j=0;j<arr[i].length;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<arr.length; 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<arr.length; 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.length;i++) {
			arr[i]=new int[i+1];
		}

在数组创建好之后,再就是赋值了,之前赋值用的是j<=i,但是此处数组的范围就是杨辉三角的范围,所以可以直接对数组进行内外两层循环。

for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr[i].length;j++) {
    }
}

而赋值的代码也是一样,不过这种方法就可以赋值完再输出,不用像第一种一样赋值时输出。

第二种方法完整代码:

public class YHSJ_2 {
	public static void main(String[] args) {
		int[][] arr=new int[10][];
		for(int i=0;i<arr.length;i++) {
			arr[i]=new int[i+1];
		}
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr[i].length;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<arr.length;i++) {
			for(int j=0;j<arr[i].length;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.length;i++) {
			arr[i]=new int[i+1];
		}
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr[i].length;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<arr.length;i++) {
			int num=(arr.length-i)/2;
			for(int k=0;k<=num;k++) {
				System.out.print("\t");
			}
			for(int j=0;j<arr[i].length;j++) {
				System.out.print(arr[i][j]+"\t");
			}
			System.out.println();
		}
	}
}

3.3、接下来为大家介绍一种等边三角形输出的简单方法

参考文章链接:http://www.cnblogs.com/JumperMan/p/6759422.html

代码:

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即可知。

效果图:

原文地址:https://www.cnblogs.com/YffCeShi/p/12239077.html

时间: 2024-11-03 20:48:50

JAVA实现杨辉三角的三种方式的相关文章

Pascal&#39;s Triangle leetcode java(杨辉三角)

题目: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 题解:既然讲到了Pascal‘s Triangle,即杨辉三角.那么就先去Wikipedia上面复习一下杨辉三角吧:”杨辉三角形,又称賈憲三角形.帕斯卡三角形.海亚姆三角形,是二项式係數在的

列表, 元组,以及字符串等字符结构以及杨辉三角的四种写法

列表的 删除复制等操作: list.remove(value) 删除遇到的第一个值 list.pop(index)就地弹出某个值 list.clear()>>None 清楚 list. reverse反转 list.sort() 排序 *** 列表的复制有浅复制和深复制之别 用=直接复制,表示地址不变,用的仅仅是链接 用shadowcopy,复制的,再列表中的列表的地址不变是链接 用deepcopy才是完全自己开了一个新列表空间 随机数的选取 random模块 dandint(a,b)返回[a

Java反射获取class对象的三种方式,反射创建对象的两种方式

Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName 静态方法. 前提:已明确类的全路径名. 第二种,使用 .class 方法. 说明:仅适合在编译前就已经明确要操作的 Class 第三种,使用类对象的 getClass() 方法. 适合有对象示例的情况下 package com.reflection; /** * Created by Liuxd

C语言打印杨辉三角(2种方法)

杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一.在高中的时候我们又知道,杨辉三角的任意一行都是的二项式系数,n为行数减1.也就是说任何一个数等于这个是高中的组合数.n代表行数减1,不代表列数减1.如:第五行的第三个数就为=6. 现在我们按第一种思路来写:先定义一个二维数组:a[N][N],略大于要打印的行数.再令两边的数为1,即当每行的第一个数和

Java基础------杨辉三角(递归实现)

  第一列 第二列 第三列 第四列 第五列 第六列 第七列 第八列 第九列 第十列 第十一列 ...... 第一行 第一个空格  第二个空格  第三个空格  第四个空格 第五个空格 1             第二行 第一个空格 第二个空格  第三个空格 第四个空格 1   1           第三行 第一个空格 第二个空格  第三个空格 1   2   1         第四行 第一个空格 第二个空格 1   3   3   1       第五行 第三个空格 1   4   6   4

使用Java打印杨辉三角

package 杨辉三角; import java.util.Scanner; public class 三角 { private static Scanner scn; public static void main(String[] args) { scn = new Scanner(System.in); System.out.println("请输入数据"); int n = scn.nextInt(); //定义一个二维数组 int [][] array = new int

Java之杨辉三角的实现

今天突然想温习一下Java的基础,想了想就写写杨辉三角吧 1 public class First 2 { 3 public static void main(String[] args) 4 { 5 int[][] Arr = new int[5][]; 6 for(int i = 0; i < Arr.length; i++) 7 { 8 Arr[i] = new int[i + 1]; 9 Arr[i][0] = 1; 10 Arr[i][i] = 1; 11 for(int j = 0;

python中杨辉三角的几种不同实现方式

计算杨辉三角的前n行:如下图所示 第n行有n项,n为正整数,第n行的数字之和为2n-1 方法一: 方法二: 方法三: : 方法四: 方法五: 方法六:

实现杨辉三角的10种解法--体验Python之美

本文收集了使用python实现杨辉三角的多种解法,主要为网上收集,也有一些是自己写的.从中可以体会python编写一个算法的不同思想和Python语法的特点. 杨辉三角是什么?还是度娘吧,看起来像是这样的:                          1                          1   1                           1   2   1                         1   3   3   1