三種方式列印楊輝三角形(JAVA實現)
阿新 • • 發佈:2018-11-16
1 //採用一個二維陣列列印楊輝三角 2 class Yanghui1 { 3 public static void main(String[] args) 4 { 5 //設定楊輝三角的行數 6 int num = 10; 7 8 //申請二維陣列存放楊輝三角數值 9 int[][] yangHui = new int [num][]; 10 for(int i = 0; i < yangHui.length; i ++) 11 yangHui[i] = new int[i + 1]; 12 13//利用楊輝三角的計算公式,初始化陣列 14 for(int i = 0; i < yangHui.length; i ++) 15 for(int j = 0; j < yangHui[i].length; j ++) 16 { 17 //每一行第一個數和最後一個數都為1 18 yangHui[i][0] = yangHui[i][i] = 1; 19 20 if(i > 1 && j > 0 && j < i) 21 //楊輝三角的值等於其上一層兩個值之和22 yangHui[i][j] = yangHui[i - 1][j] + yangHui[i -1][j -1]; 23 } 24 25 //遍歷陣列,以輸出 26 for(int i = 0; i < yangHui.length; i ++) 27 { 28 for(int j = 0; j < (num - i - 1) / 2; j ++) 29 System.out.print("\t"); 30 for(int j = 0; j < yangHui[i].length; j ++)31 System.out.print(yangHui[i][j] + "\t"); 32 33 System.out.println(); 34 } 35 } 36 37 } 38 39 //採用兩個一維陣列列印楊輝三角 40 class YangHui2 41 { 42 public static void main(String[] args) 43 { 44 int num = 20; 45 46 //申請UP陣列用以儲存上一層的資料 47 int[] up = new int[num]; 48 for(int i = 0; i <= num; i ++) 49 { 50 //申請a陣列用以存放本層的運算結果 51 int[] a = new int[i]; 52 for(int j = 0; j < i; j ++) 53 { 54 //將本層第一個和最後一個數值賦值為1 55 if(j == 0 || j == i) 56 a[j] = up[j] = 1; 57 58 //當從第三行起,非首尾數字的值等於上方兩數只和 59 if(i > 2 && j !=0 && j != i ) 60 a[j] = up[j - 1] + up[j]; 61 } 62 63 //將本層的運算結果存到up陣列中,以供一下次運算使用 64 for(int k = 0; k < i; k ++) 65 up[k] = a[k]; 66 67 //列印本層數字 68 for(int k = 0; k < (num - i - 1) / 2; k ++) 69 System.out.print("\t"); 70 for(int k = 0; k < i; k ++) 71 System.out.print(a[k] + "\t"); 72 73 System.out.println(); 74 } 75 } 76 } 77 78 //採用一個一維陣列列印楊輝三角 79 class YangHui3 80 { 81 public static void main(String[] args) 82 { 83 int num = 10; 84 85 //申請陣列存放楊輝三角的數值 86 int yangHui[] = new int[(1 + num) * num / 2]; 87 for(int i = 0; i < num; i ++) 88 { 89 for(int j = 0; j < (num - i - 1) / 2; j ++) 90 System.out.print("\t"); 91 92 //temp表示已經儲存的數字個數 93 int temp = (1 + i) * i / 2; 94 for(int j = 0; j <= i; j ++) 95 { 96 //每一層的首尾數值為1 97 if(j == 0 || j == i) 98 yangHui[temp + j] = 1; 99 100 else 101 //非首尾數值為上面兩數之和 102 yangHui[temp + j] = yangHui[temp + j - i] + yangHui[temp + j - i - 1]; 103 System.out.print(yangHui[temp + j] + "\t"); 104 } 105 } 106 System.out.println(); 107 } 108 }