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

效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM