Given a 2D square matrix, find sum of elements in Principal and Secondary diagonals. For example, consider the following 4 X 4 input matrix.
A00 A01 A02 A03 A10 A11 A12 A13 A20 A21 A22 A23 A30 A31 A32 A33
The primary diagonal is formed by the elements A00, A11, A22, A33.
- Condition for Principal Diagonal: The row-column condition is row = column.
The secondary diagonal is formed by the elements A03, A12, A21, A30. - Condition for Secondary Diagonal: The row-column condition is row = numberOfRows – column -1.
Examples :
Input : 4 1 2 3 4 4 3 2 1 7 8 9 6 6 5 4 3 Output : Principal Diagonal: 16 Secondary Diagonal: 20 Input : 3 1 1 1 1 1 1 1 1 1 Output : Principal Diagonal: 3 Secondary Diagonal: 3
Method 1 (O(n ^ 2) :
In this method we use two loops i.e. a loop for columns and a loop for rows and in the inner loop we check for the condition stated above:
C++
// A simple C++ program to find sum of diagonals #include <bits/stdc++.h> using namespace std; const int MAX = 100; void printDiagonalSums( int mat[][MAX], int n) { int principal = 0, secondary = 0; for ( int i = 0; i < n; i++) { for ( int j = 0; j < n; j++) { // Condition for principal diagonal if (i == j) principal += mat[i][j]; // Condition for secondary diagonal if ((i + j) == (n - 1)) secondary += mat[i][j]; } } cout << "Principal Diagonal:" << principal << endl; cout << "Secondary Diagonal:" << secondary << endl; } // Driver code int main() { int a[][MAX] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; printDiagonalSums(a, 4); return 0; } |
Java
// A simple java program to find // sum of diagonals import java.io.*; public class GFG { static void printDiagonalSums( int [][]mat, int n) { int principal = 0 , secondary = 0 ; for ( int i = 0 ; i < n; i++) { for ( int j = 0 ; j < n; j++) { // Condition for principal // diagonal if (i == j) principal += mat[i][j]; // Condition for secondary // diagonal if ((i + j) == (n - 1 )) secondary += mat[i][j]; } } System.out.println( "Principal Diagonal:" + principal); System.out.println( "Secondary Diagonal:" + secondary); } // Driver code static public void main (String[] args) { int [][]a = { { 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 }, { 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 } }; printDiagonalSums(a, 4 ); } } // This code is contributed by vt_m. |
Python3
# A simple Python program to
# find sum of diagonals
MAX = 100
def printDiagonalSums(mat, n):
principal = 0
secondary = 0;
for i in range(0, n):
for j in range(0, n):
# Condition for principal diagonal
if (i == j):
principal += mat[i][j]
# Condition for secondary diagonal
if ((i + j) == (n – 1)):
secondary += mat[i][j]
print(“Principal Diagonal:”, principal)
print(“Secondary Diagonal:”, secondary)
# Driver code
a = [[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ]]
printDiagonalSums(a, 4)
# This code is contributed
# by ihritik
C#
// A simple C# program to find sum // of diagonals using System; public class GFG { static void printDiagonalSums( int [,]mat, int n) { int principal = 0, secondary = 0; for ( int i = 0; i < n; i++) { for ( int j = 0; j < n; j++) { // Condition for principal // diagonal if (i == j) principal += mat[i,j]; // Condition for secondary // diagonal if ((i + j) == (n - 1)) secondary += mat[i,j]; } } Console.WriteLine( "Principal Diagonal:" + principal); Console.WriteLine( "Secondary Diagonal:" + secondary); } // Driver code static public void Main () { int [,]a = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; printDiagonalSums(a, 4); } } // This code is contributed by vt_m. |
PHP
<?php // A simple PHP program to // find sum of diagonals $MAX = 100; function printDiagonalSums( $mat , $n ) { global $MAX ; $principal = 0; $secondary = 0; for ( $i = 0; $i < $n ; $i ++) { for ( $j = 0; $j < $n ; $j ++) { // Condition for // principal diagonal if ( $i == $j ) $principal += $mat [ $i ][ $j ]; // Condition for // secondary diagonal if (( $i + $j ) == ( $n - 1)) $secondary += $mat [ $i ][ $j ]; } } echo "Principal Diagonal:" , $principal , "
" ; echo "Secondary Diagonal:" , $secondary , "
" ; } // Driver code $a = array ( array ( 1, 2, 3, 4 ), array ( 5, 6, 7, 8 ), array ( 1, 2, 3, 4 ), array ( 5, 6, 7, 8 )); printDiagonalSums( $a , 4); // This code is contrbuted by ajit ?> |
Output:
Principal Diagonal:18 Secondary Diagonal:18
This code takes O(n^2) time and O(1) auxiliary space
Method 2 (O(n) :
In this method we use one loop i.e. a loop for calculating sum of both the principal and secondary diagonals:
C++
// An efficient C++ program to find sum of diagonals #include <bits/stdc++.h> using namespace std; const int MAX = 100; void printDiagonalSums( int mat[][MAX], int n) { int principal = 0, secondary = 0; for ( int i = 0; i < n; i++) { principal += mat[i][i]; secondary += mat[i][n - i - 1]; } cout << "Principal Diagonal:" << principal << endl; cout << "Secondary Diagonal:" << secondary << endl; } // Driver code int main() { int a[][MAX] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; printDiagonalSums(a, 4); return 0; } |
Java
// An efficient java program to find // sum of diagonals import java.io.*; public class GFG { static void printDiagonalSums( int [][]mat, int n) { int principal = 0 , secondary = 0 ; for ( int i = 0 ; i < n; i++) { principal += mat[i][i]; secondary += mat[i][n - i - 1 ]; } System.out.println( "Principal Diagonal:" + principal); System.out.println( "Secondary Diagonal:" + secondary); } // Driver code static public void main (String[] args) { int [][]a = { { 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 }, { 1 , 2 , 3 , 4 }, { 5 , 6 , 7 , 8 } }; printDiagonalSums(a, 4 ); } } // This code is contributed by vt_m. |
Python3
# A simple Python3 program to find
# sum of diagonals
MAX = 100
def printDiagonalSums(mat, n):
principal = 0
secondary = 0
for i in range(0, n):
principal += mat[i][i]
secondary += mat[i][n – i – 1]
print(“Principal Diagonal:”, principal)
print(“Secondary Diagonal:”, secondary)
# Driver code
a = [[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ]]
printDiagonalSums(a, 4)
# This code is contributed
# by ihritik
C#
// An efficient C#program to find // sum of diagonals using System; public class GFG { static void printDiagonalSums( int [,]mat, int n) { int principal = 0, secondary = 0; for ( int i = 0; i < n; i++) { principal += mat[i,i]; secondary += mat[i,n - i - 1]; } Console.WriteLine( "Principal Diagonal:" + principal); Console.WriteLine( "Secondary Diagonal:" + secondary); } // Driver code static public void Main () { int [,]a = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; printDiagonalSums(a, 4); } } // This code is contributed by vt_m. |
PHP
<?php // An efficient PHP program // to find sum of diagonals $MAX = 100; function printDiagonalSums( $mat , $n ) { global $MAX ; $principal = 0; $secondary = 0; for ( $i = 0; $i < $n ; $i ++) { $principal += $mat [ $i ][ $i ]; $secondary += $mat [ $i ][ $n - $i - 1]; } echo "Principal Diagonal:" , $principal , "
" ; echo "Secondary Diagonal:" , $secondary , "
" ; } // Driver Code $a = array ( array (1, 2, 3, 4), array (5, 6, 7, 8), array (1, 2, 3, 4), array (5, 6, 7, 8)); printDiagonalSums( $a , 4); // This code is contributed by aj_36 ?> |
Output :
Principal Diagonal:18 Secondary Diagonal:18
This code takes O(n) time and O(1) auxiliary space
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
leave a comment
0 Comments