实现:
杨辉三角实例
资料:杨辉三角第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3…依此类推。
杨辉三角另外一个重要的特性就是每一行首尾两个数字都是1、中间的数字等于上一行相邻两个数字的和、即排列组合中通常所运用的:
C(m,n) = C(m-1,n-1)+C(m-1,n)
实例为打印杨辉三角(要求打印出十行如上图)
我的思想:定义两个数组,一个数组用于用来输出本列的数据,另一个数组用来进行存储上一行的数据。arr[10],为第一类型的数组。ar[11]为第二类型的数组,多出一个地址是为了进行存储数据。
依图得:前后都为1,中间的数据则为由上一行的数据得出。则先定义好第一个元素的数据和最后一个元素的数据,将arr的数据发送在ar存储的时候,主要语句为
i=1;//从1开始
arr[i] = ar[i]+ar[i-1];
ar[i-1]=arr[i];
因为arr[0]=1;一开始的时候直接已经赋值了。
但是ar[0]的第一个元素不为1,这样的会会造成下一次数据的差错,所以要移动数据。
利用一个循环来移动数据
ar[n] = ar[n-1];//移动数据
附上渣代码:
public class test31 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] ar = new int[11] ;//存储上一行的数值。
int[] arr = new int[10];//存储本行数值。
getYanhui(ar,arr);
}
private static void getYanhui(int[] ar, int[] arr) {
// TODO Auto-generated method stub
int i;
int j;
ar[1]=1;
//定义好第一个数据
for(i = 1; i<=10;i++) {//十行
ar[0]=1;
for(int n=0;n<10-i;n++)
System.out.print(" ");
arr[0]=1;//第一个数值为1
System.out.print(arr[0]+" ");
if(i>2)
for(j =1;j<i-1;j++) {//每一行的数值存储以及进行转换。
arr[j]=ar[j-1]+ar[j];//第一个数值以及赋值,所以j+1
ar[j-1]=arr[j];//进行数值存储
System.out.print(arr[j]+" ");
}
for(int n=i;n>0;n--) {
ar[n] = ar[n-1];//移动数据
}
if(i>=2) {//最后一个数值为1,并输出
arr[i-1]=1;
System.out.print(arr[i-1]+" ");
}
System.out.println();//进行换行
}
}
}
别人的代码:!!
下面的代码第一的是一个二维数组a[10][10]
然后在指定的地方添加数值就可以了。
public class test31 {
public static void main(String[] args) {
int[][] a = new int[10][10];
for(int i =0;i<10;i++) {
for(int j =0;j<=i;j++) {
if(j==0||j==i) {//第一个和最后一个为1
a[i][j]=1;
}
else {
a[i][j] = a[i-1][j-1]+a[i-1][j];
}
}
}
for(int i =0;i<10;i++) {
for(int j=0;j<10-i-1;j++)
System.out.print(" ");
for(int n=0;n<=i;n++)
System.out.print(a[i][n]+" ");
System.out.println();
}
}
}
别的代码,用简短的代码就可以表示出他们的思想。