JAVA实现杨辉三角的三种方式
一、前言
既然是實現楊輝三角,就要知道什么是楊輝三角。如下圖,就是兩種楊輝三角。
(1)等邊形狀的楊輝三角
?
(2)直角形狀的楊輝三角
?
在知道這兩種都是楊輝三角之后,我們就來實現利用java語言打印出楊輝三角。
二、楊輝三角的規律
用二維數組表示就是a[i][0]=1;? a[i][j]=1(當i==j時);
用二維數組表示就是 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<=ifor(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即可知。
效果圖:
?
總結
以上是生活随笔為你收集整理的JAVA实现杨辉三角的三种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习之数据预处理——降噪
- 下一篇: rust 使用fltk 的小问题