帕斯卡三角形,计算给定行和列的数字 Java
Pascal's triangle, calculating number at given row and column Java
我有一个小任务,我必须生成一个帕斯卡三角形,然后根据用户输入的行和列找到一个数字。这就是我想出的全部,我不知道如何继续计算给定行和列的数字。
import java.util.Scanner;
public class PascalTriangle {
public static void print(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(pascal(i, j) + " ");
}
System.out.println();
}
}
public static int pascal(int i, int j) {
if (j == 0) {
return 1;
} else if (j == i) {
return 1;
} else {
return pascal(i - 1, j - 1) + pascal(i - 1, j);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the row number");
int row = scanner.nextInt();
print(row);
}
}
首先,你的代码会很慢。我不会做你的作业,但你可以通过知道前一行来计算帕斯卡三角形的下一行,在每个单元格的恒定时间内,而你目前正在使用 huge 时间重新计算相同的值。
其次,对于你的实际问题,你可以查看formula of a cell in the Pascal Triangle。这不是正确的方法,但仍然可以作为在 Pascal 三角形上记录自己的起点。
使用此公式,您可以通过计算 only its row.
来计算给定位置的数字
编辑
您最近的评论似乎指向了一个不会计算某个位置的值,而是计算一个值的位置的意愿。事先,这样的位置绝对没有唯一性:几乎所有的值在三角形中至少出现两次,因为它是对称的。
但是如果你想 return 例如这些位置的字典序中的第一个,您可以逐行计算(使用与显示三角形相同的方案),然后在获得所需值后立即停止。
我有一个小任务,我必须生成一个帕斯卡三角形,然后根据用户输入的行和列找到一个数字。这就是我想出的全部,我不知道如何继续计算给定行和列的数字。
import java.util.Scanner;
public class PascalTriangle {
public static void print(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(pascal(i, j) + " ");
}
System.out.println();
}
}
public static int pascal(int i, int j) {
if (j == 0) {
return 1;
} else if (j == i) {
return 1;
} else {
return pascal(i - 1, j - 1) + pascal(i - 1, j);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the row number");
int row = scanner.nextInt();
print(row);
}
}
首先,你的代码会很慢。我不会做你的作业,但你可以通过知道前一行来计算帕斯卡三角形的下一行,在每个单元格的恒定时间内,而你目前正在使用 huge 时间重新计算相同的值。
其次,对于你的实际问题,你可以查看formula of a cell in the Pascal Triangle。这不是正确的方法,但仍然可以作为在 Pascal 三角形上记录自己的起点。
使用此公式,您可以通过计算 only its row.
来计算给定位置的数字编辑
您最近的评论似乎指向了一个不会计算某个位置的值,而是计算一个值的位置的意愿。事先,这样的位置绝对没有唯一性:几乎所有的值在三角形中至少出现两次,因为它是对称的。
但是如果你想 return 例如这些位置的字典序中的第一个,您可以逐行计算(使用与显示三角形相同的方案),然后在获得所需值后立即停止。