杨辉三角

来源:互联网 发布:虎牙象棋勇哥是软件 编辑:程序博客网 时间:2024/06/04 21:29

杨辉三角

1.问题描述

(a+b)的n次幂的展开式中各项的系数很有规律,
对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
输入:4 2
输出:3

2.代码

public class Q109 {    public static void main(String[] args) {        Scanner scanner=new Scanner(System.in);        String string=scanner.nextLine();        String [] strings=string.split("\\s+");        int n=Integer.parseInt(strings[0]);//层        int m=Integer.parseInt(strings[1]);//列      //  System.out.println(""+n+" "+m);        int result=f109(n,m);        System.out.println(result);    }    private static int f109(int n, int m) {        if(n==1||m==1||n==m)            return 1;        else            return f109(n-1,m-1)+f109(n-1,m);    }}

3.打印杨辉三角
输入:11
输出:

                    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     

4.方法1

public class Q109_1 {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        f109_1(n);    }    private static void f109_1(int n) {        int m = n;        for (int i = 1; i <= n + 1; i++) {            String temp = "";            temp = getStrings(m--);//返回每行前的空格            System.out.print(temp);            for (int j = 1; j <= i; j++) {                System.out.print(getNum(i, j) + " ");            }            System.out.println();        }    }    private static String getStrings(int n) {        String temp = "";        for (int i = 0; i < n; i++) {            temp += " ";        }        return temp;    }    private static int getNum(int i, int j) {//返回数字        if (i == 1 || j == 1 || i == j)            return 1;        else            return getNum(i - 1, j - 1) + getNum(i - 1, j);    }}

5.方法2

import java.util.Scanner;  public class Test {      // 得到最大数的长度       public static int getMaxLen(int[] n){          int sum = 0;          for(int i=0;i<=n.length/2;i++){              if(n[i]>sum){                  sum = n[i];              }          }          return (""+sum).length();      }      // 初始化填充杨辉三角       public static void init(int[][] m) {          m[0] = new int[]{1};    // 初始第一行           for(int i=1;i<m.length;i++){              m[i] = new int[i+1];              for(int j=0;j<=i;j++){                  if(j==0||j==i){                      m[i][j] = 1;                  }else{                      m[i][j] = m[i-1][j-1] + m[i-1][j];                  }              }          }      }      // 输出空格       public static void printSp(int n){          for(int i=0;i<n;i++){              System.out.print(" ");          }      }      // 显示杨辉三角       public static void show(int[][] m) {          int len = getMaxLen(m[m.length-1]); // 得到最大数的长度+1个空格           if(len%2==0){   // 上一行下和对齐               len += 2;   // 偶数加2           }else{              len += 1;   // 奇数加1           }          for(int i=0;i<m.length;i++){ // 输出               printSp((m.length-i)*len/2);    // 输出(每行前)的若干空格               for(int j=0;j<=i;j++){                  System.out.print(m[i][j]);                  printSp(len-(m[i][j]+"").length()); // 输出(数字间)的若干空格               }              System.out.println();          }      }      public static void main(String[] args){          Scanner scan = new Scanner(System.in);         int n = scan.nextInt();          if(n<=0) return ;          int[][] m = new int[n][];          init(m);    // 初始化填充杨辉三角           show(m);    // 显示杨辉三角       }  }  
0 0