2015-11-15 25 views
0

我試圖在整個二維數組中迭代以找到其總和等於兩者之和的行其他行在同一個二維數組中。 我很難找出如何比較sum2和sum3爲零之前的比較;搜索在二維數組中是否存在一行,其總和等於相同二維數組中其他兩行的總和

*爲SUM2:其金額將只是在行(N-1)的總和,相同SUM3 *只需要找到一種方式重新SUM2和SUM3零

boolean compare(int n, int [][] A) 
    { 
     int i, j, k, x, y, p, sum, sum2, sum3, total; 

     //row 
     for (i = 0; i < n; i++) 
     { 
      sum = 0; 
      //col 
      for (j = 0; j < n; j++) 
       sum+= A[i][j]; 

      //row 
      for (k = 0; k < n; k++) 
      { 
       sum2 = 0;  
       //col 
       if (k != i) 
        for (x = 0; x < n; x++) 
         sum2 += A[k][x]; 
      }  

      for (y = 0; y < n; y++) 
      { 
       sum3 = 0; 
       if ((y != k) && (y != i))  
        for (p = 0; p < n; p++)  
         sum3 += A[y][p]; 
      } 

      total = sum2 + sum3; 

      if (sum == (total)) 
       return true;     

     }//for (i = 0; i < n; i++) 


     return false; 

} 
之前比較

任何輸入,非常感謝

****在這裏,我們走了,我下面更新我的代碼:

boolean compare(int n, int [][] A) 
{ 

    int i, j, k, x, y; 

    int [] sumArray = new int[n]; 


    for (i = 0; i < n; i++) 
    { 
     sum = 0; 
     for(j = 0; j < n; j++) 
      sum += A[i][j]; 

     sumArray[i] = sum; 
    } 

    for (k = 0; k < n; k++) 
    { 
     for(x = 0; x < n; x++) 
     { 
      if(x != k) 
      { 
       for(y = 0; y < n; y++) 
       { 
        if((y != x) && (y != k)) 
        { 
         if(sumArray[k] == (sumArray[x] + sumArray[y])) 
           return true; 

        } 
       } 

      }  
     } 
    } 

    return false; 


} 
+0

代碼中的'n'是什麼? – JohnnyAW

+2

也許計算每一行的總和會更簡單,然後將總和值作爲一維數組使用? –

+0

@aguibert是我的第一個,但也是:) – JohnnyAW

回答

1

好像計算每一行的總和並將它們放入一維數組中會更容易。然後,您可以以更簡潔的方式比較每行的總和,並且避免多次計算每行的總和。

而且,參數int n不需要爲compare()方法,因爲你可以檢查被傳遞的數組的長度屬性

public boolean compare(int[][] arr) { 

    final int rowLen = arr.length; 
    int[] sums = new int[rowLen]; 

    // Compute sum of each row 
    for (int row = 0; row < rowLen; row++) { 
     int rowSum = 0; 
     int[] rowArr = arr[row]; 
     for (int col = 0; col < rowArr.length; col++) 
      rowSum += rowArr[col]; 
     sums[row] = rowSum; 
    } 

    // Check if row n equals the sum of any other 2 rows 
    for (int n = 0; n < sums.length; n++) { 
     for (int i = 0; i < sums.length; i++) { 
      for (int j = i + 1; j < sums.length; j++) 
       if (n != i && n != j && sums[n] == sums[i] + sums[j]) { 
        // sum of row n equals sums of rows i+j 
        System.out.println("Sum of row " + n + " is equal to the sums of rows " + i + " and " + j); 
        return true; 
       } 
     } 
    } 

    return false; 
} 

免責聲明:未經測試的代碼,但它可以讓我的觀點accross

+0

嗯,我認爲你應該改爲'int i = 0'並檢查'i == n' – JohnnyAW

+0

你能更具體嗎?在我發佈的代碼 –

+0

中沒有'int i = 0',你應該改變'for(int i = n; i JohnnyAW