Program to find the Product of diagonal elements of a matrix - GeeksforGeeks

28 May, 2021
Given an N * N matrix, the task is to find the product of the elements of left and right diagonal. Examples:  
Input: arr[] = 1 2 3 4
               5 6 7 8 
               9 7 4 2
               2 2 2 1
Output: 9408
Explanation:
Product of left diagonal = 1 * 4 * 6 * 1 = 24
Product of right diagonal = 4 * 7 * 7 * 2 = 392
Total product = 24 * 392 = 9408

Input: arr[] = 2 1 2 1 2
               1 2 1 2 1
               2 1 2 1 2
               1 2 1 2 1
               2 1 2 1 2  
Output : 512
Explanation:
Product of left diagonal = 2 * 2 * 2 * 2 * 2 = 32
Product of right diagonal = 2 * 2 * 2 * 2 * 2 = 32
But we have a common element in this case so
Total product = (32 * 32)/2  = 512
 
Approach:  
We need to find out the principal diagonal and secondary diagonal elements of the matrix. Please refer to this article for this [ Program to print the Diagonals of a Matrix ]  
In this method, we use one loop i.e. a loop for calculating product of both the principal and secondary diagonals
Divide the answer by middle element for matrix of odd size
Below is the implementation of the above approach:  
CPP
Java
Python3
C#
Javascript
// C++ Program to find the Product// of diagonal elements of a matrix #include <bits/stdc++.h>using namespace std; // Function to find the product of diagonalsint productDiagonals(int arr[][100], int n){     int product = 1;    // loop for calculating product of both    // the principal and secondary diagonals    for (int i = 0; i < n; i++) {         // For principal diagonal index of row        // is equal to index of column        product = product * arr[i][i];         // For secondary diagonal index        // of column is n-(index of row)-1        product = product * arr[i][n - i - 1];    }     // Divide the answer by middle element for    // matrix of odd size    if (n % 2 == 1) {        product = product / arr[n / 2][n / 2];    }     return product;} // Driver codeint main(){    int arr1[100][100] = { { 1, 2, 3, 4 },                           { 5, 6, 7, 8 },                           { 9, 7, 4, 2 },                           { 2, 2, 2, 1 } };    // Function calling    cout << productDiagonals(arr1, 4) << endl;     int arr2[100][100] = { { 2, 1, 2, 1, 2 },                           { 1, 2, 1, 2, 1 },                           { 2, 1, 2, 1, 2 },                           { 1, 2, 1, 2, 1 },                           { 2, 1, 2, 1, 2 } };    // Function calling    cout << productDiagonals(arr2, 5) << endl;    return 0;}
// Java Program to find the Product// of diagonal elements of a matriximport java.util.*; class GFG{ // Function to find the product of diagonalsstatic int productDiagonals(int arr[][], int n){     int product = 1;    // loop for calculating product of both    // the principal and secondary diagonals    for (int i = 0; i < n; i++)    {         // For principal diagonal index of row        // is equal to index of column        product = product * arr[i][i];         // For secondary diagonal index        // of column is n-(index of row)-1        product = product * arr[i][n - i - 1];    }     // Divide the answer by middle element for    // matrix of odd size    if (n % 2 == 1)    {        product = product / arr[n / 2][n / 2];    }     return product;} // Driver codepublic static void main(String[] args){    int arr1[][] = { { 1, 2, 3, 4 },                        { 5, 6, 7, 8 },                        { 9, 7, 4, 2 },                        { 2, 2, 2, 1 } };    // Function calling    System.out.print(productDiagonals(arr1, 4) + "\n");     int arr2[][] = { { 2, 1, 2, 1, 2 },                        { 1, 2, 1, 2, 1 },                        { 2, 1, 2, 1, 2 },                        { 1, 2, 1, 2, 1 },                        { 2, 1, 2, 1, 2 } };    // Function calling    System.out.print(productDiagonals(arr2, 5) + "\n");}} // This code is contributed by PrinciRaj1992
# Python3 Program to find the Product# of diagonal elements of a matrix # Function to find the product of diagonalsdef productDiagonals(arr, n):     product = 1;         # loop for calculating product of both    # the principal and secondary diagonals    for i in range(n):         # For principal diagonal index of row        # is equal to index of column        product = product * arr[i][i];         # For secondary diagonal index        # of column is n-(index of row)-1        product = product * arr[i][n - i - 1];         # Divide the answer by middle element for    # matrix of odd size    if (n % 2 == 1):        product = product // arr[n // 2][n // 2];     return product; # Driver codeif __name__ == '__main__':    arr1 = [[ 1, 2, 3, 4 ],[ 5, 6, 7, 8 ],            [ 9, 7, 4, 2 ],[ 2, 2, 2, 1 ]];     # Function calling    print(productDiagonals(arr1, 4));     arr2 = [[ 2, 1, 2, 1, 2 ],[ 1, 2, 1, 2, 1 ],            [ 2, 1, 2, 1, 2 ],[ 1, 2, 1, 2, 1 ],            [ 2, 1, 2, 1, 2 ]];     # Function calling    print(productDiagonals(arr2, 5));     # This code is contributed by 29AjayKumar
// C# Program to find the Product// of diagonal elements of a matrixusing System; class GFG{ // Function to find the product of diagonalsstatic int productDiagonals(int [,]arr, int n){     int product = 1;         // loop for calculating product of both    // the principal and secondary diagonals    for (int i = 0; i < n; i++)    {         // For principal diagonal index of row        // is equal to index of column        product = product * arr[i,i];         // For secondary diagonal index        // of column is n-(index of row)-1        product = product * arr[i,n - i - 1];    }     // Divide the answer by middle element for    // matrix of odd size    if (n % 2 == 1)    {        product = product / arr[n / 2,n / 2];    }     return product;} // Driver codepublic static void Main(String[] args){    int [,]arr1 = { { 1, 2, 3, 4 },                    { 5, 6, 7, 8 },                    { 9, 7, 4, 2 },                    { 2, 2, 2, 1 } };         // Function calling    Console.Write(productDiagonals(arr1, 4) + "\n");     int [,]arr2 = { { 2, 1, 2, 1, 2 },                    { 1, 2, 1, 2, 1 },                    { 2, 1, 2, 1, 2 },                    { 1, 2, 1, 2, 1 },                    { 2, 1, 2, 1, 2 } };         // Function calling    Console.Write(productDiagonals(arr2, 5) + "\n");}} // This code is contributed by 29AjayKumar
<script>  // JavaScript Program to find the Product// of diagonal elements of a matrix // Function to find the product of diagonalsfunction productDiagonals(arr, n){     var product = 1;    // loop for calculating product of both    // the principal and secondary diagonals    for (var i = 0; i < n; i++) {         // For principal diagonal index of row        // is equal to index of column        product = product * arr[i][i];         // For secondary diagonal index        // of column is n-(index of row)-1        product = product * arr[i][n - i - 1];    }     // Divide the answer by middle element for    // matrix of odd size    if (n % 2 == 1) {        product =        product / arr[parseInt(n / 2)][parseInt(n / 2)];    }     return product;} // Driver codevar arr1 = [ [ 1, 2, 3, 4 ],                       [ 5, 6, 7, 8 ],                       [ 9, 7, 4, 2 ],                       [ 2, 2, 2, 1 ] ];// Function callingdocument.write( productDiagonals(arr1, 4) + "<br>");var arr2 = [ [ 2, 1, 2, 1, 2 ],                       [ 1, 2, 1, 2, 1 ],                       [ 2, 1, 2, 1, 2 ],                       [ 1, 2, 1, 2, 1 ],                       [ 2, 1, 2, 1, 2 ] ];// Function callingdocument.write( productDiagonals(arr2, 5)); </script>
9408
512
 
Time Complexity: O(N) 
princiraj1992
29AjayKumar
rrrtnx
Matrix
School Programming
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Efficiently compute sums of diagonals of a matrix
Flood fill Algorithm - how to implement fill() in paint?
Check for possible path in 2D matrix
Zigzag (or diagonal) traversal of Matrix
Mathematics | L U Decomposition of a System of Linear Equations
Python Dictionary
Arrays in C/C++
Inheritance in C++
Reverse a string in Java
C++ Classes and Objects