您的位置:首页 > 其它

课堂作业之杨辉三角形

2017-11-21 19:34 225 查看

杨辉三角形数学模型

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: