练习-Java循环综合/* * 任务:从控制台获取输入的正整数n,打印带有n行的杨辉三角形 * 每个数字保证最少5个宽度,每行前面保证2n个宽度 杨辉三角形的特点: - 第 n 行有 n 个数字; - 每一行的开始和结尾数字都为 1; - 从第 3 行起,除去每一行的开始和结尾数字,其余每个数都满足以下条件:任意一个数等于上一行同列和上一行前一列的和, 如以下杨辉三角形中第 3 行第 2 列中的 2 等于它上一行同列(第 2 行第 2 列中的 1)和上一行前一列(第 2 行第 1 列中的 1)的和。 以下是有5行的杨辉三角形: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 */ // 请在Begin-End间编写代码 /********** Begin **********/ // 导入 Scanner 类 import java.util.Scanner; public class test{ public static void main(String[] args){ Scanner reader = new scanner(System.in); int n =reader.nextInt(); int[][] a=new int[n][n]; for(int i=0;i<n;i++){ for(int j=0;j<i;j++){ a[i][1]=1; a[i][i]=1; if(i>2){ a[i][j]=a[i-1][j-1]+a[i-1][j]; } } } for(int i=0;i<n;i++){ for(int j=0;j<i;j++){ print(a[i][j]); if(j=!1){printf(" ");} } } } } // 定义公开类 Test // 定义主方法 main,在该方法中完成本关任务 /********** End **********/ 练习三之杨辉三角形
时间: 2025-03-16 07:14:59 浏览: 58
### 杨辉三角形的生成方法
要实现一个 Java 程序来生成带有指定行数的杨辉三角形,可以采用二维数组存储每一行的数据并打印出来。以下是详细的解决方案:
#### 使用二维数组构建杨辉三角形
通过分析杨辉三角形的特点可知,除了首尾两个位置外,其他任意位置上的数值等于其上一行对应位置及其前一位置之和。因此可以通过循环结构填充二维数组中的数据。
```java
import java.util.Scanner;
public class YangHuiTriangle {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入杨辉三角形的行数:");
int rows = scanner.nextInt();
// 创建二维数组用于保存杨辉三角形
int[][] triangle = new int[rows][];
for (int i = 0; i < rows; i++) {
triangle[i] = new int[i + 1]; // 设置当前行为i+1列
// 首位与末位设为1
triangle[i][0] = 1;
triangle[i][triangle[i].length - 1] = 1;
// 填充中间部分
for (int j = 1; j < triangle[i].length - 1; j++) {
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
}
// 打印杨辉三角形
for (int i = 0; i < rows; i++) {
for (int k = 0; k < rows - i - 1; k++) {
System.out.print(" "); // 控制格式化输出
}
for (int j = 0; j < triangle[i].length; j++) {
System.out.print(triangle[i][j] + " ");
}
System.out.println(); // 换行
}
}
}
```
上述代码实现了基于用户输入行数动态生成杨辉三角形的功能[^1]。它利用了嵌套循环完成对二维数组 `triangle` 的初始化以及格式化输出操作。
#### 关于第20行第10列的具体计算方式
如果仅需获取特定行列值,则无需完全构造整个矩阵。可以直接依据组合数学公式 C(n, m)=n! / [(m!) * ((n-m)!)] 进行快速定位。对于题目提到的情况即C(20-1,9),可通过如下函数单独求解:
```java
private static long combination(int n, int r){
if(r > n || r<0)return 0L;
long result=1;
for(int i=1;i<=r;i++){
result=result*(n-i+1)/i ;
}
return result;
}
// 调用此方法得到具体数值
long valueAtRowCol = combination(19,9);
System.out.printf("The number at row %d and column %d is:%d\n",20 ,10,valueAtRowCol );
```
这里采用了更高效的算法避免重复乘除运算从而提升性能效率[^2]。
阅读全文
相关推荐














