package day01;
import java.util.Scanner;
public class Democ9杨辉三角 {
public static void main(String[] args) {
int[][] arr=new int[10000][];
for(int i=0;i<arr.length;i++) {
arr[i]=new int[i+1];
}
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
if(j==0 || i==j) {
arr[i][j]=1;
}else {
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
}
}
Scanner scanner =new Scanner(System.in);
int n = scanner.nextInt();
int m =0;
int mm =0;
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
m++;
if (n==arr[i][j]) {
mm++;
System.out.println(m);
break;
}
}
if (mm==1)
break;
}
输入超过8位数不出结果,变量改成long一样
如果有疑问,可以交流。
是的,将变量从int更改为long应该可以解决输入值大于8位数时无法获得结果的问题。以下是修改后的代码:
package day01;
import java.util.Scanner;
public class Democ9杨辉三角 {
public static void main(String[] args) {
long[][] arr = new long[10000][];
for (int i = 0; i < arr.length; i++) {
arr[i] = new long[i + 1];
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (j == 0 || i == j) {
arr[i][j] = 1;
} else {
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
}
}
Scanner scanner = new Scanner(System.in);
long n = scanner.nextLong();
long m = 0;
long mm = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
m++;
if (n == arr[i][j]) {
mm++;
System.out.println(m);
break;
}
}
if (mm == 1)
break;
}
}
}
杨辉三角会所有整数都出现吗?是不是你输入的这个8位数不在杨辉三角里呢
如果输入的整数n非常大,二维数组arr可能会超出内存限制。为了避免这种情况,可以使用一维数组来存储杨辉三角的数值,而不是使用二维数组。
以下是改进后的代码:
import java.util.Scanner;
public class YanghuiTriangle {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = 1;
for (int j = i - 1; j > 0; j--) {
arr[j] = arr[j] + arr[j - 1];
}
}
System.out.println("第" + n + "行杨辉三角的数值是:");
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
}
这段代码使用了一维数组arr来存储杨辉三角的数值。数组arr的长度为n,初始值为1。使用两层循环,遍历数组arr,计算每个数值,并将结果存储在数组arr中。最后,输出第n行的数值。
相比于原来的代码,改进后的代码占用的内存更少,能够处理更大的整数n。