关于杨辉三角

实现:这里写图片描述

杨辉三角实例

资料:杨辉三角第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();
        }

    }
}

别的代码,用简短的代码就可以表示出他们的思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值