1. 程式人生 > >五十道程式設計小題目 --- 33 楊輝三角 java

五十道程式設計小題目 --- 33 楊輝三角 java

【程式33】 

題目:打印出楊輝三角形(要求打印出10行如下圖) 
1.程式分析: 

1 1 
1 2 1 
1 3 3 1 

1 4 6 4 1 

1 5 10 10 5 1 

楊輝三角:

1 1   1    1   2   1    1   3   3   1    1   4   6   4   1    1   5   10  10  5   1    1   6   15  20  15  6   1    1   7   21  35  35  21  7   1    1   8   28  56  70  56  28  8   1    1   9   36  84  126 126 84  36  9   1   
1   10  45  120 210 252 210 120 45  10  1    1   11  55  165 330 462 462 330 165 55  11  1     1   12  66  220 495 792 924 792 495 220 66  12  1

性質:

1.每個數等於它上方兩數之和。

2.每行數字左右對稱,由1開始逐漸變大。

3.第n行的數字有n項。

4.第n行數字和為2n-1

5.第n行的m個數可表示為 C(n-1,m-1),即為從n-1個不同元素中取m-1個元素的組合數。

6.第n行的第m個數和第n-m+1個數相等 ,為組合數性質之一。

7.每個數字等於上一行的左右兩個數字之和。可用此性質寫出整個楊輝三角。即第n+1行的第i個數等於第n行的第i-1個數和第i個數之和,這也是組合數的性質之一。即 

C(n+1,i)=C(n,i)+C(n,i-1)

8.(a+b)n的展開式中的各項係數依次對應楊輝三角的第(n+1)行中的每一項。

9.將第2n+1行第1個數,跟第2n+2行第3個數、第2n+3行第5個數……連成一線,這些數的和是第4n+1個斐波那契數;將第2n行第2個數(n>1),跟第2n-1行第4個數、第2n-2行第6個數……這些數之和是第4n-2個斐波那契數。

10.將各行數字相排列,可得11的n-1(n為行數)次方:1=11^0; 11=11^1; 121=11^2……當n>5時會不符合這一條性質,此時應把第n行的最右面的數字"1"放在個位,然後把左面的一個數字的個位對齊到十位... ...,以此類推,把空位用“0”補齊,然後把所有的數加起來,得到的數正好是11的n-1次方。以n=11為例,第十一行的數為:1,10,45,120,210,252,210,120,45,10,1,結果為 25937424601=11

10

import java.util.Random;

public class YanghuiTriangle {
	
	public static void main(String[] args) {
		
		Random r = new Random();
		int n = r.nextInt(20);
		System.out.println("輸出"+n+"行楊輝三角值");
		int[][] arr = new int[n][n];
		int i=0, j=0;
		for(; i<n; i++){ //行數
			arr[i][0] = 1;
			arr[i][i] =1;
			for(j=1; j<i; j++ ){ 
				arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
			}
		}
		print(arr);
	}
	
	//列印二維陣列
	private static void print(int[][] arr){
		for(int i=0; i<arr.length; i++){
			for(int j=0; j<=i; j++){
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}
}
輸出結果:
輸出7行楊輝三角值
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1