java趣味编程案例三:两种杨辉三角的实现

要求:根据输入行数,打印出杨辉三角,这里我们实现两种杨辉三角:直角三角形和等腰三角形的杨辉三角,如下所示:

   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

问题分析:无论是哪一种杨辉三角,下面的数字都是等于该数字上面两个数字之和。我们采用二维数组来保存数据,其他地方用空格表示或者不输出。

直角三角形

代码分析:

import java.util.Scanner;

public class _3YanghuiTriangle {

//打印数组的方法,因为我们只输出数组的一半,即下三角部分,所以列遍历的时候取值小于等于行数
    public static void printArray(int[][] arr){
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<=i;j++){
                System.out.printf(" %3d",arr[i][j]);
            }
            System.out.println();
        }
    }
//获得杨辉三角的方法
    public static int[][] getTriangle(int num){
        int[][] arr=new int[num][num];
        //赋值操作,每一行第一个数据和对角线处的数据都为1
        for(int i=0;i<arr.length;i++){
            arr[i][0]=1;
            arr[i][i]=1;
        }
        //除了竖边和斜边,其他位置的值等于它的上方数据和左上角数之和
        for(int i=1;i<arr.length;i++){
            for(int j=1;j<=i;j++){
                arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
            }
        }
        return  arr;
    }

    public static void main(String[] args) {
        System.out.println("请输入行数");
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int[][] arr=getTriangle(n);
        printArray(arr);
    }
}

等腰三角形

代码分析:

import java.util.Scanner;

public class _3YanghuiTriangle2 {

    public static void main(String[] args) {
        System.out.println("请输入行号");
        Scanner scanner=new Scanner(System.in);
        //行数
        int m=scanner.nextInt();
       //列数:根据杨辉三角图形很容易得出行数和列数的关系,即列数等于二倍行数-1
        int n=2*m-1;
        int[][] arr=new int[m][n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
            //没有值的位置为空格,找出这些关系
                if((j<m-i-1)||(j>=m+i)){
                    System.out.print("  ");
                }
                //赋值为1的位置
                else if((j==m-i-1)||(j==m+i-1)){
                    arr[i][j]=1;
                    System.out.printf("%3d",arr[i][j]);
                }
                //赋值空格
                else if((i+j)%2==0&&m%2==0||(i+j)%2==1&&m%2==1){
                    System.out.print("  ");
                }
                //输出中间数字
                else {
                    arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1];
                    System.out.printf("%3d",arr[i][j]);
                }
            }
            System.out.println();
        }
    }
}

完整代码

1.

import java.util.Scanner;

public class _3YanghuiTriangle {

    public static void printArray(int[][] arr){
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<=i;j++){
                System.out.printf(" %3d",arr[i][j]);
            }
            System.out.println();
        }
    }

    public static int[][] getTriangle(int num){
        int[][] arr=new int[num][num];
        for(int i=0;i<arr.length;i++){
            arr[i][0]=1;
            arr[i][i]=1;
        }
        for(int i=1;i<arr.length;i++){
            for(int j=1;j<=i;j++){
                arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
            }
        }
        return  arr;
    }

    public static void main(String[] args) {
        System.out.println("请输入行数");
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int[][] arr=getTriangle(n);
        printArray(arr);
    }
}

2.

import java.util.Scanner;

public class _3YanghuiTriangle2 {

    public static void main(String[] args) {
        System.out.println("请输入行号");
        Scanner scanner=new Scanner(System.in);
        int m=scanner.nextInt();
        int n=2*m-1;
        int[][] arr=new int[m][n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if((j<m-i-1)||(j>=m+i)){
                    System.out.print("  ");
                }
                else if((j==m-i-1)||(j==m+i-1)){
                    arr[i][j]=1;
                    System.out.printf("%3d",arr[i][j]);
                }
                else if((i+j)%2==0&&m%2==0||(i+j)%2==1&&m%2==1){
                    System.out.print("  ");
                }
                else {
                    arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1];
                    System.out.printf("%3d",arr[i][j]);
                }

            }
            System.out.println();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/ayangann915/article/details/80201212
今日推荐