2011-07-03 55 views
2

添加對角線值我有以下的二維數組在二維數組

 int [][] array = {{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 
          {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}, 
          {20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, 
          {30, 31, 32, 33, 34, 35, 36, 37, 38, 39}, 
          {40, 41, 42, 43, 44, 45, 46, 47, 48, 49}, 
          {50, 51, 52, 53, 54, 55, 56, 57, 58, 59}, 
          {60, 61, 62, 63, 64, 65, 66, 67, 68, 69}, 
          {70, 71, 72, 73, 74, 75, 76, 77, 78, 79}, 
          {80, 81, 82, 83, 84, 85, 86, 87, 88, 89}, 
          {90, 91, 92, 93, 94, 95, 96, 97, 98, 99}}; 

我有這樣的代碼,找到數組中的所有值的總和。我如何修改它只添加從0開始的對角線值(0 + 11 + 22 + 33等)?

public static int arraySum(int[][] array) 
{ 
    int total = 0; 

    for (int row = 0; row < array.length; row++) 
    { 
     for (int col = 0; col < array[row].length; col++) 
      total += array[row][col]; 
    } 

    return total; 
} 

回答

11

由於對角線是完美的正方形,所以只需要一個循環來添加對角線。


添加對角線從淵源考:

public static int arraySum(int[][] array){ 
    int total = 0; 

    for (int row = 0; row < array.length; row++) 
    { 

     total += array[row][row]; 
    } 

    return total; 
} 

添加兩條對角線:

從淵源考添加對角線:(注意它增加了中心如果需要twice..you可以減去一個)

public static int arraySum(int[][] array){ 
    int total = 0; 

    for (int row = 0; row < array.length; row++) 
    { 
     total += array[row][row] + array[array.length - row-1][array.length - row-1]; 
    } 

    return total; 
} 
5
public static int arraySum(int[][] array) 
{ 
    int total = 0; 

    for (int index = 0; index < array.length; index++) 
    { 
      total += array[index][index]; 
    } 

    return total; 
} 

當然這是假定米×米的尺寸。

2
import java.util.Scanner; 

public class Solution { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int n = in.nextInt(); 
     int leftStartDiagnol = 0; 
     int rightStartDiagnol = n; 
     int leftTotal = 0; 
     int rightTotal = 0; 
     int a[][] = new int[n][n]; 
     for (int a_i = 0; a_i < n; a_i++) { 
      for (int a_j = 0; a_j < n; a_j++) { 
       a[a_i][a_j] = in.nextInt(); 
      } 
     } 
     for (int a_i = 0; a_i < n; a_i++) { 
      boolean leftNotFound = true; 
      boolean rightNotFound = true; 
      rightStartDiagnol = --rightStartDiagnol; 

      for (int a_j = 0; a_j < n; a_j++) { 
       if (leftStartDiagnol == a_j && leftNotFound) { 
        leftTotal = leftTotal + a[a_i][a_j]; 
        leftNotFound = false; 
       } 
       if (rightStartDiagnol == a_j && rightNotFound) { 
        rightTotal = rightTotal + a[a_i][a_j]; 
        rightNotFound = false; 
       } 
      } 
      leftStartDiagnol = ++leftStartDiagnol; 
     } 
     int data = leftTotal - rightTotal; 
     System.out.println(Math.abs(data)); 
    } 
} 
2

這是我的溶液 -

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    int n = in.nextInt(); 
    int a[][] = new int[n][n]; 
    for(int a_i=0; a_i < n; a_i++){ 
     for(int a_j=0; a_j < n; a_j++){ 
      a[a_i][a_j] = in.nextInt(); 
     } 
    } 
    int l_sum = 0; 
    for(int i = 0; i<n ; i++){ 
     l_sum+=a[i][i]; 
    } 
    int r_sum = 0; 
    for(int j = 0; j<n ; j++){ 
     r_sum+=a[j][n-1-j]; 
    } 

    int sum = l_sum + r_sum; 

    System.out.println(sum); 
    } 
} 
1
import java.io.*; 
import java.util.*; 
public class DigArraySum { 
public static void main(String[] args) { 
    Scanner s=new Scanner(System.in); 
    int n=Integer.parseInt(s.nextLine()); //array size 
    int[][] a=new int[n][n]; // new array 
    for (int i=0;i<n;i++) { 
     String str=s.nextLine(); 
     String[] tempArray=str.split(" "); 
     for (int j=0;j<n;j++) { 
     a[i][j]=Integer.parseInt(tempArray[j]); 
     } 
    } 
    int x=0;//primary diagonal sum 
    int y=0;//secondary diagonal sum 
    int sum=0;//total sum 
    for (int i=0;i<n;i++) { 
     x += a[i][i]; 
    } 
    for (int p=0;p<n;p++) { 
     int k=a.length-p-1; 
     y+=a[p][a.length-p-1]; 
     k+=-1; 
    } 
    sum=x-y; 
    System.out.println(Math.abs(sum)); 
    } 
    } 

說明: 例如3×3矩陣: 3 //數組大小

10 8 -12

主對角線是: -12

橫跨薩姆的主對角線:11 + 5 - 12 = 4

二次對角線是:整個次要對角線:4 + 5 + 10 = 19

總和:| 4 + 19 | = 23

+1

不要以爲需要k + = - 1 –

2

這是我的解決方案。看看它。

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 
public class Solution { 
public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    int n = in.nextInt(); 
    int a[][] = new int[n][n]; 
    int total1=0; 
    int total2=0; 

    for(int a_i=0; a_i < n; a_i++){ 
     for(int a_j=0; a_j < n; a_j++){ 
      a[a_i][a_j] = in.nextInt(); 
     } 
     total1+= a[a_i][a_i]; 
     total2+=a[a_i][n-1-a_i]; 
    } 
    System.out.println(Math.abs(total1-total2)); 
} 

}在PHP

0

解決方案。邏輯與此處已發佈的內容完全相同。只有在PHP中才有所不同。

<?php 

$handle = fopen ("php://stdin", "r"); 
function diagonalDifference($a) { 
    $sumA = []; 
    $sumB = []; 

    $n = count($a); 

    for ($i = 0; $i < $n; $i++) { 
     for ($j = 0; $j < $n; $j++) { 
      if ($i === $j) { 
       $sumA[] = $a[$i][$j]; 
      } 

      if ($i + $j == count($a) -1) { 
       $sumB[] = $a[$i][$j]; 
      } 
     } 
    } 

    $sum1 = array_sum($sumA); 
    $sum2 = array_sum($sumB); 

    return abs($sum1 - $sum2); 
} 

fscanf($handle, "%i",$n); 
$a = array(); 
for($a_i = 0; $a_i < $n; $a_i++) { 
    $a_temp = fgets($handle); 
    $a[] = explode(" ",$a_temp); 
    $a[$a_i] = array_map('intval', $a[$a_i]); 
} 
$result = diagonalDifference($a); 
echo $result . "\n"; 
?>