课堂作业之杨辉三角形

杨辉三角形数学模型

    1
   11
  121
 1331

通过java实现打印杨辉三角形

用循环队列来实现杨辉三角形的打印

package PascalTriangle;

import javafoundations.CircularArrayQueue;

import java.util.Scanner;

public class YHTriangleQueue {
    public static void main(String args[]) {
    Scanner scan = new Scanner(System.in);
    System.out.print("请输入杨辉三角的行数:");
    int n = scan.nextInt();
    int i = 0;

    CircularArrayQueue<Integer> queue = new CircularArrayQueue<>();
    //初始值设置为 0,1
    queue.enqueue(0);
    queue.enqueue(1);

    while (i <= n) {
        int x = queue.dequeue();
        int y = queue.first();
        if (x == 0) {
            i++;  //每次 x = 0 时行数加一
            queue.enqueue(0);
        }
        queue.enqueue(x + y);  //上一轮输出值与检测值之和,相当于前一行相邻的两元素之和
        if (x == 0) {
            System.out.println();  //删除 0 相当于换行
            for (int j = 0; j < 2 * (n - i); j++) {  //根据具体变化动态输出空字符串
                System.out.print(" ");
            }
        } else
            System.out.print(x + "   ");  //根据具体变化动态输出空字符串
        }
    }
}
图片名称 - 单步跟踪 图片名称

二维数组打印杨辉三角

public class Yanghui1 {
public static void main(String[] args)
{
   int num = 10;             //设置杨辉三角的行数  
   int[][] yangHui = new int [num][];          //申请二维数组存放杨辉三角数值
   for(int i = 0; i < yangHui.length; i ++)
   yangHui[i] = new int[i + 1];

for(int i = 0; i < yangHui.length; i ++)       //利用杨辉三角的计算公式,初始化数组
  for(int j = 0; j < yangHui[i].length; j ++)
  {
    yangHui[i][0] = yangHui[i][i] = 1;        //每一行第一个数和最后一个数都为1
    if(i > 1 && j > 0 && j < i)
      yangHui[i][j] = yangHui[i - 1][j] + yangHui[i -1][j -1];  //杨辉三角的值等于其上一层两个值之和
  }

for(int i = 0; i < yangHui.length; i ++)    //遍历数组,以输出
    {
  for(int j = 0; j < (num - i - 1) / 2; j ++)
    System.out.print("\t");
  for(int j = 0; j < yangHui[i].length; j ++)
    System.out.print(yangHui[i][j] + "\t");

  System.out.println();
    }
  }
}

两个一维数组打印杨辉三角

public class YangHui2    {
  public static void main(String[] args)  
   {
    int num = 20;
    int[] up = new int[num];    //申请UP数组用以存储上一层的数据
    for(int i = 0; i <= num; i ++)
     {      
      int[] a = new int[i];     //申请a数组用以存放本层的运算结果
      for(int j = 0; j < i; j ++)
      {
        if(j == 0 || j == i)           //将本层第一个和最后一个数值赋值为1
          a[j] = up[j] = 1;

        if(i > 2 && j !=0 && j != i )   //当从第三行起,非首尾数字的值等于上方两数只和
          a[j] = up[j - 1] + up[j];
      }

      for(int k = 0; k < i; k ++)      //将本层的运算结果存到up数组中,以供一下次运算使用
        up[k] = a[k];

      for(int k = 0; k < (num - i - 1) / 2; k ++)      //打印本层数字
        System.out.print("\t");
      for(int k = 0; k < i; k ++)
        System.out.print(a[k] + "\t");

      System.out.println();
        }
      }
    }

一个一维数组打印杨辉三角

public class YangHui3{
public static void main(String[] args)
  {
    int num = 10;

int yangHui[] = new int[(1 + num) * num / 2];    //申请数组存放杨辉三角的数值
for(int i = 0; i < num; i ++)
{
  for(int j = 0; j < (num - i - 1) / 2; j ++)
    System.out.print("\t");

  int temp = (1 + i) * i / 2;     //temp表示已经存储的数字个数
  for(int j = 0; j <= i; j ++)
  {
    if(j == 0 || j == i)          //每一层的首尾数值为1
      yangHui[temp + j] = 1;
      
    else        
      yangHui[temp + j] = yangHui[temp + j - i] + yangHui[temp + j - i - 1];//非首尾数值为上面两数之和
      System.out.print(yangHui[temp + j] + "\t");
  }
}
System.out.println();
  }
}
posted @ 2017-11-21 19:34  林臻  阅读(388)  评论(0编辑  收藏  举报