杨辉三角,又称帕斯卡三角形,是一个在数学中非常有名的数列,在杨辉三角中,每个数字是它上方两数之和,本文将使用Java语言实现一个打印杨辉三角形的程序。
算法思路
1、初始化一个二维数组,用于存储杨辉三角的每行数据。
2、第一行和第一列都是1。
3、对于非第一行和非第一列的元素,其值等于上一行对应位置和前一个位置的和。
4、逐行打印出杨辉三角。
代码实现
public class YangHuiTriangle { public static void printYangHuiTriangle(int numRows) { // 创建二维数组 int[][] triangle = new int[numRows][]; // 填充数组并计算每一行的元素个数 for (int i = 0; i < numRows; i++) { triangle[i] = new int[i + 1]; triangle[i][0] = 1; // 每行的第一个元素为1 triangle[i][i] = 1; // 每行的最后一个元素为1 for (int j = 1; j < i; j++) { // 计算中间元素的值 triangle[i][j] = triangle[i 1][j 1] + triangle[i 1][j]; } } // 打印杨辉三角 for (int i = 0; i < numRows; i++) { for (int j = 0; j <= i; j++) { System.out.print(triangle[i][j] + " "); } System.out.println(); } } public static void main(String[] args) { int numRows = 10; // 指定打印行数 printYangHuiTriangle(numRows); } }
执行结果
运行上述程序后,将会输出如下所示的杨辉三角形:
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
相关问题与解答
Q1: 如果我想要生成一个不规则的杨辉三角(比如每行的数字不是等差的),应该怎么修改代码?
A1: 如果需要生成不规则的杨辉三角,你需要定义一个新的规则来替换现有的加法规则,如果你想让每个数字是上一行对应位置的两倍,你可以将triangle[i][j] = triangle[i 1][j 1] + triangle[i 1][j];
这行代码改为triangle[i][j] = 2 * triangle[i 1][j 1];
,这将生成一个不同的三角形。
Q2: 我能否不使用二维数组来实现这个功能,而是直接打印每一行?
A2: 当然可以,你可以直接在循环中计算每一行的值,并在每次迭代结束时打印它们,这样做的缺点是你无法保存整个杨辉三角的状态,但如果你只需要打印它,那么这种方法是可以的,以下是一个简化的示例:
public class YangHuiTriangleDirectPrint { public static void printYangHuiTriangle(int numRows) { for (int i = 0; i < numRows; i++) { // 直接计算并打印每一行 for (int j = 0; j <= i; j++) { int num = (int) (Math.round(Math.pow(1.0 / (iBin(j, i)), iBin(i, i)))); System.out.print(num + " "); } System.out.println(); } } public static long iBin(int n, int k){ if(n>k || n<0 || k<0) return 0; if(n==0 || n==k) return 1; return iBin(n-1, k-1) + iBin(n-1, k); } public static void main(String[] args) { int numRows = 10; // 指定打印行数 printYangHuiTriangle(numRows); } }
上述代码使用了组合公式C(n, k)来计算每个位置的值,并且没有使用额外的存储空间来保存整个三角形。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1042031.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复