杨辉三角形数学模型
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(" ");
for(int j = 0; j < yangHui[i].length; j ++)
System.out.print(yangHui[i][j] + " ");
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(" ");
for(int k = 0; k < i; k ++)
System.out.print(a[k] + " ");
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(" ");
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] + " ");
}
}
System.out.println();
}
}