有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对角差分

我是编程初学者,在编写对角线差分代码时,我想出了这种方法

 public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int j = 0;
    int a[][] = new int[n][n];
    int count1 = 0; int count2 = 0;
    int result = 0;
    for(int a_i=0; a_i < n; a_i++){
        for(int a_j = 0;a_j < n;a_j++){
       
            a[a_i][j] = in.nextInt();
        
    }}
    for(int i = 0;i<n;i++)
    {
        count1+=a[i][j];
        System.out.println(count1);
        j++;
    }
    j = 0;
    for(int i = n-1;i>=0;i--)
    {
        count2+=a[i][j];
        System.out.println(count2);
        j++;
    }
    result = Math.abs(count1 - count2);
    System.out.println(result);
}

输入
3
11.2.4
4.5.6
10.8-12

预期产出15
我的输出16


共 (6) 个答案

  1. # 1 楼答案

    public static int diagonalDifference(List<List<Integer>> arr) {
        
        ListIterator<List<Integer>> itr = arr.listIterator();
        int i = 0,k=arr.size();
        int sumdia1=0 , sumdia2=0;
        List <Integer> inner;
        System.out.println(" k ::: "+k);
        while(itr.hasNext()) {
                 inner = itr.next();
                 k--;
                sumdia1= sumdia1 + inner.get(i);
                sumdia2= sumdia2+ inner.get(k);
                i++;
            
        }
    
  2. # 2 楼答案

    为什么要做这么多工作? 你需要一个非常简单的代码:

    for(int i = 0;i<n;i++){
        count1+=a[i][i];
        count2+=a[i][n-1-i];
    }
    
  3. # 3 楼答案

    在java中,解决方案是

        int result = 0;
        for(int i = 0;i<n;i++){
            l+=a[i][i];
            r+=a[i][n-1-i];
        }
        result = abs(l-r);
    

    对于那些想在python中实现同样功能的人来说,下面是一些方法:

    def diagonalDifference(a):
        l = sum(a[i][i] for i in range(len(a)))
        r = sum(a[i][len(a)-1-i] for i in range(len(a)))
        return (abs(r- l))
    
  4. # 4 楼答案

    根据弗兰克的回答,你实际上不需要数组:

    for(int i=0; i < n; i++){
      for(int j = 0; j < n; j++){
        int v = in.nextInt();
        count1 += (i == j) ? v : 0;
        count2 += (i + j == n-1) ? v : 0;
      }
    }
    
  5. # 5 楼答案

    这里是Javascript。为了可读性,我使用forEach。在Java中也可以做类似的事情

    function diagonalDifference(arr) {
        let length = arr.length-1;
        let leftDiag = 0;
        let rightDiag = 0;
    
    
        arr.forEach((item, outerIndex) => {
            item.forEach((innerItem, innerIndex) => {
                if (outerIndex === innerIndex) {
                    leftDiag = leftDiag + innerItem;
                }
                if (length - outerIndex === innerIndex) {
                    rightDiag = rightDiag + innerItem;
                }
            });
        });
    
        return Math.abs(leftDiag - rightDiag);
    
    }
    
  6. # 6 楼答案

    我用Java解决对角差分问题

    public static int diagonalDifference(List<List<Integer>> arr) {
        int primaryDiagnal = 0;
        int secDiagnal = 0;
        int diff;
    
        for(int i= 0; i<arr.get(0).size(); i++){
            primaryDiagnal += arr.get(i).get(i);
        }
    
        int col = arr.get(0).size() - 1;
        for(int i= 0; i<arr.get(0).size(); i++){
            secDiagnal += arr.get(i).get(col);
            col--;
        }
    
        diff = primaryDiagnal - secDiagnal;
        return Math.abs(diff);
     }