欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法练习——Pascal三角形

程序员文章站 2022-03-06 08:02:38
...

算法练习——Pascal三角形

思路:1:总结出数字规律

            第n行第一列和第n列总是为1

            第n行r列的数为第(n-1)行r列+(n-1)行(r-1)列

            2:总结出打印在输出上的格式

过程中的错误想法:引用排列组合函数C(n,r),还需分情况考虑,太过繁琐

package com.suanfa.test;

import java.util.Scanner;

//巴斯卡三角形
public class Pascal {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        for (int i = 1; i <=n; i++) {
            for (int j = 1; j <n-i+1; j++) {
                System.out.print("#");//第i行的前n+i-1列打印为空格(此处为#)
            }
            for (int j = 1; j <=i; j++) {
                System.out.print(pascal(i,j)+" ");
            }
            System.out.println();
        }

    }
    //返回杨辉三角数列
    public static int pascal(int n,int r) {
        if (r==1||n==r) {
            return 1;
        }
        else
            return pascal(n-1,r)+pascal(n-1,r-1);
    }

}


排列组合函数方式:

package com.suanfa.test;

import java.util.Scanner;

//巴斯卡三角形
public class Pascal {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        for (int i = 1; i <=n; i++) {
            for (int j = 1; j <n-i+1; j++) {
                System.out.print("#");
            }
//            for (int j = 1; j <=i; j++) {
//                System.out.print(pascal(i,j)+" ");
//            }
            for (int j = 1; j <=i; j++) {
                if (j==1||j==i) {
                    System.out.print(1+" ");
                }
                if (i>2&j>1&j<i) {                            //条件易出错
                    System.out.print(C(i-1,j-1)+" ");
                }
            }
            System.out.println();
        }

    }
    //累乘
    public static long N(int n) {
        long num=1;
        while (n>1) {
            num=num*n--;
        }
        return num;
    }
    //排列数公式
    public static long A(int n,int r) {
        long num=1;
        return N(n)/N(n-r);
    }
    //组合数公式
    public static long C(int n,int r) {
        long num = 1;
        return A(n,r)/N(r);
    }
    //返回杨辉三角数列
    public static int pascal(int n,int r) {
        if (r==1||n==r) {
            return 1;
        }
        else
            return pascal(n-1,r)+pascal(n-1,r-1);
    }

}