其他
经典算法:杨辉三角
(给算法爱好者加星标,修炼编程内功)
来源:CSDN- 扬帆向海
一、杨辉三角的介绍
百度百科对于杨辉三角是这样介绍的:_
二、杨辉三角的算法思想
杨辉三角的两个腰边的数都是 1,从第3行起,除第一个数和最后一个数外,其它位置的数都是上顶上两个数之和。
三、代码实现
1.第一种写法
public class YangHuiTriangle1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入要打印的行数:");
int n = scanner.nextInt();
// 打印杨辉三角
getTriangle(n);
}
/**
* 打印杨辉三角
*
* @param n 要打印的行数
* @return
*/
private static int[][] getTriangle(int n) {
// 创建一个二维数组,此二维数组用来存放杨辉三角中每一行的值
int[][] array = new int[n][n];
// 给数组元素赋值
for (int i = 0; i < array.length; i++) {
// 每一行的值
array[i] = new int[i + 1];
// 给首末元素赋值
array[i][0] = array[i][i] = 1;
// 给每行的非首末元素赋值
if (i > 1) {
for (int j = 1; j < array[i].length - 1; j++) {
array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
}
}
}
// 遍历二维数组
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + "\t");
}
System.out.println();
}
return array;
}
}
代码执行结果:
输入要打印的行数:10
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
2.第二种写法
public class YangHuiTriangle2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入要打印的行数:");
int n = scanner.nextInt();
// 打印杨辉三角
int array[][] = getTriangle(n);
// 打印成等腰三角形
printTriangle(array);
}
private static int[][] getTriangle(int n) {
// 创建一个二维数组,此二维数组用来存放杨辉三角中每一行的值
int[][] array = new int[n][n];
// 给数组元素赋值
for (int i = 0; i < array.length; i++) {
// 每一行的值
array[i] = new int[i + 1];
// 给首末元素赋值
array[i][0] = array[i][i] = 1;
// 给每行的非首末元素赋值
if (i > 1) {
for (int j = 1; j < array[i].length - 1; j++) {
array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
}
}
}
return array;
}
/**
* 打印成等腰三角形
*
* @param array
*/
public static void printTriangle(int[][] array) {
for (int i = 0; i < array.length; i++) {
// 输出杨辉三角数字前面的空格
for (int j = 0; j < array.length - 1 - i; j++) {
System.out.print(" ");
}
for (int j = 0; j <= i; j++) {
// 用空格填补空位置
System.out.print(" ");
// 以十进制整数的形式输出,位宽是3,左对齐
System.out.printf("%-3d", array[i][j]);
}
System.out.println();
}
}
}
代码执行结果:
输入要打印的行数:
10
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
- EOF -
觉得本文有帮助?请分享给更多人
推荐关注「算法爱好者」,修炼编程内功
点赞和在看就是最大的支持❤️