簡體   English   中英

如何從一個二維數組中添加整數並創建一個新的二維數組

[英]How to add integers from one two dimensional array and create a new two dimensional array

我正在嘗試解決一個問題,其中一個二維數組 (A) 是

1 1 0
1 1 0
1 1 0

得到的二維數組(B)是

1 2 2
2 4 4
3 6 6

B 中的每個點都是 A 中相應條目的總和,加上它左側和上方的所有條目。

這是我到目前為止所做的

public static void main(String[] args) 
    { 

        int[][] arrA = { { 1, 1,0 }, { 1, 1,0 },{ 1, 1,0 } }; 
        int[][] arrB = new int [3] [3]; 

        for (int i = 0; i < arrA.length; i++) { 
            for (int j = 0; j < arrA.length; j++) { 
                System.out.print(arrA[i][j] + " "); 
            } 

            System.out.println(); 
        } 

        System.out.println(); 

    for (int r=0; r<arrB.length; r++) {

        for(int c=0; c<arrB[r].length; c++) {

            arrB[r][c] = r * c; 
        }

    }

    for(int r=0; r < arrB.length; r++) {
        for(int c=0; c < arrB[r].length; c++) {

        //  if((r==0 || r==(arrA.length-1)) || (c==0 || c==(arrA.length-1)) )
            arrB[r][c] = r+c;
            System.out.print(arrB[r][c]+" ");
        }

        System.out.println();
    }


} 
}

我得到的答案是

0 1 2 
1 2 3 
2 3 4 

我的問題是如何在數組 B 中獲得正確的數字。我錯過了什么代碼?

B每個值可以計算為:

B(i,j) = B(i-1,j-1) + B((i-1,j) - (i-1,j-1)) + A(i,j) + B((i,j-1)-(i-1,j-1))

這是因為:

對角線值 (i-1,j-1)是 (i,j) 的所有左側和頂部值的總和,不包括直接頂部和左側值。

左值 (i, j-1)是直接左值 + 對角線值的總和。

最高值 (i-1,j)是直接最高值 + 對角線值的總和。

所以,通過結合這 3 個值和當前元素,我們得到 B(i,j) 的值

這是更新的代碼:

public static void main(String args[])  {
         int[][] arrA = { { 1, 1,0 }, { 1, 1,0 },{ 1, 1,0 } }; 
         int [][]B = new int [3][3];
         int diag, i, j,top,left;
         int len = arrA.length;
         int bredth = arrA[0].length;
         for( i=0;i<len;i++){
             for( j=0;j<bredth;j++) {
                 diag = 0; top=0; left=0;
                 if(i-1>=0 && j-1>=0) {
                     diag = B[i-1][j-1];
                 }
                 if(i-1>=0) {
                     top = B[i-1][j];
                 }
                 if(j-1>=0) {
                     left = B[i][j-1];
                 }
                 B[i][j] = diag + arrA[i][j] + (top-diag) + (left-diag);
             }
         }
         for(i=0;i<3;i++) {
             for(j=0;j<3;j++) {
                 System.out.print(B[i][j]);
             }
             System.out.println();
         }
    }

您的代碼問題在於您只是添加indexes而不考慮values 但是根據您的問題,B 的每個值都應等於sum of corresponding entry in A, plus all entries to the left and above it

for(int r=0; r < arrB.length; r++) {
        for(int c=0; c < arrB[r].length; c++) {

        //  if((r==0 || r==(arrA.length-1)) || (c==0 || c==(arrA.length-1)) )
            arrB[r][c] = r+c; //Here `r` and `c` are just indexes value not actual value
            System.out.print(arrB[r][c]+" "); 
        }

        System.out.println();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM