【Java】打印楊輝三角 根據(jù)輸入行數(shù),打印出楊輝三角形,如圖1.10所示。 圖1.10 楊輝三角形 案例分析 觀察楊輝三角形的圖案,可以發(fā)現(xiàn)其中的規(guī)律:三角形的豎邊和斜邊都是“1”,三角形里面的任意一個數(shù)字正好等于它正上方的數(shù)字和左上角的數(shù)字兩個數(shù)字之和。第幾行就有幾個數(shù)字,可以把它補充成如圖1.11所示效果。 圖1.11 方陣 方陣(行列相等的矩陣)大家都很熟悉了,可以通過二維數(shù)組來處理方陣,一個雙重循環(huán)就能實現(xiàn),外循環(huán)控制行數(shù),內(nèi)循環(huán)控制列來完成方陣內(nèi)數(shù)字的計算和存儲。 案例實現(xiàn) 1 確定程序框架 由前面的問題分析可知,先從鍵盤接收楊輝三角的高度,然后通過二維數(shù)組計算存儲楊輝三角,最后把楊輝三角打印出來。程序框架代碼如下: public class Ch1_5 { public static void main(String[] args) { System.out.print("請輸入行數(shù):"); Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); //鍵盤接收行數(shù) int[][] ary = getTriangle(num); //得到楊輝三角 print(ary); //打印楊輝三角 } } 2 得到楊輝三角 由前面的問題分析可知,用二維數(shù)組計算存儲楊輝三角,楊輝三角豎邊、斜邊都為1,可以先賦值,然后再給中間元素賦值,當(dāng)前位置的值等于它的上方數(shù)和左上角上的數(shù)之和。程序代碼如下: private static int[][] getTriangle(int num) { int[][] ary = new int[num][num]; //用二維數(shù)組存儲 for(int i = 0; i < ary.length; i++) //豎邊、斜邊置1 { ary[i][0] = 1; ary[i][i] = 1; } for(int i = 1; i < ary.length; i++) //外循環(huán)控制行數(shù) { for(int j = 1; j <= i; j++) //內(nèi)循環(huán)控制列 { //里面部分,等于當(dāng)前位置的上方和左上角之和 ary[i][j] = ary[i-1][j-1] + ary[i-1][j]; } } return ary; } 3 打印楊輝三角 楊輝三角保存在二維數(shù)組中,通過一個雙重循環(huán)就可以打印出來,但是要注意的是,不需要把所有元素都打印出來,內(nèi)循環(huán)列的控制要小于等于當(dāng)前行數(shù)。程序代碼如下: private static void print(int[][] ary) { for(int i=0;i<ary.length;i++) //外循環(huán)控制行 { for(int j=0;j<=i;j++) //內(nèi)循環(huán)控制列 { System.out.printf(" %-3d", ary[i][j]); } System.out.println(); //換行 } } 4 完整程序 現(xiàn)在我們就需要把剛才的程序進行組合,構(gòu)成我們的完整程序: import java.util.Scanner; public class Ch1_5 { public static void main(String[] args) { System.out.print("請輸入行數(shù):"); Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); //從鍵盤接收行數(shù) int[][] ary = getTriangle(num); //得到楊輝三角 print(ary); //打印楊輝三角 } //得到楊輝三角 private static int[][] getTriangle(int num) { int[][] ary = new int[num][num]; //用二維數(shù)組存儲 for(int i = 0; i < ary.length; i++) //豎邊、斜邊置1 { ary[i][0] = 1; ary[i][i] = 1; } for(int i = 1; i < ary.length; i++) //外循環(huán)控制行 { for(int j = 1; j <= i; j++) //內(nèi)循環(huán)控制列 { //里面部分,等于當(dāng)前位置的上方和左上角之和 ary[i][j] = ary[i-1][j-1] + ary[i-1][j]; } } return ary; } private static void print(int[][] ary) { for(int i=0;i<ary.length;i++) //外循環(huán)控制行 { for(int j=0;j<=i;j++) //內(nèi)循環(huán)控制列 { System.out.printf(" %-3d", ary[i][j]); } System.out.println(); //輸出換行 } } } 5 運行程序 運行程序,結(jié)果如圖1.12所示。 圖1.12 程序輸出結(jié)果 長按指紋,識別二維碼,一鍵關(guān)注 擴展訓(xùn)練 圖1.12輸出的楊輝三角是直角三角形,能不能輸出等腰三角形呢?答案是肯定的。等腰三角形類似于前面的金字塔圖案,參考前面介紹的思路,不難輸出等腰三角形。 (1)參考代碼 import java.util.*; public class Ch1_5_2 { public static void main(String[] args) { Scanner in = new Scanner(System.in); //獲取控制臺輸入對象 System.out.print("請輸入行號: "); int m = in.nextInt(); //從鍵盤接收輸入 int n=2*m-1; //列元素個數(shù) int arr[][]=new int[m][n]; for(int i=0;i<m;i++) //外循環(huán)控制行 { for(int j=0;j<n;j++) //內(nèi)循環(huán)控制列 { if(j<(m-i-1)||(j>=(m+i))) //輸出等腰三角形兩邊空格 System.out.print(" "); else if((j==(m-i-1))||(j==(m+i-1))) { arr[i][j]=1; System.out.printf("%-3d",arr[i][j]); } else if((i+j)%2==0&&m%2==0||(i+j)%2==1&&m%2==1) System.out.print(" "); else //計算并輸出中間數(shù)字 { arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1]; System.out.printf("%-3d",arr[i][j]); } } System.out.println(); //輸出換行 } } } (2)運行結(jié)果 運行程序,結(jié)果如圖1.13所示。
圖1.13 程序輸出結(jié)果 |
|