关于#java#的问题,请各位专家解答!

img

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。