# Convert given Matrix into a Symmetric Matrix by replacing elements at (i, j) and (j, i) with their mean

• Difficulty Level : Medium
• Last Updated : 07 Mar, 2022

Given an integer N and a N x N matrix, the task is to convert the given matrix into a symmetric matrix by replacing (i, j)th and (j, i)th element with their arithmetic mean.

Examples:

Input: arr[] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}}
Output:
1 3 5
3 5 7
5 7 9
Explanation: The diagonal elements are same. The element at index (0, 1) = 2 and (1, 0) = 4 is replaced by their arithmetic mean i.e, (2 + 4) / 2 = 3. Similarly, the elements at index (2, 0) and (0, 2), (2, 1) and (1, 2) are also replaced by their arithmetic mean and the resulting output matrix is a symmetric matrix.

Input: arr[] = {{12, 43, 65},
{23, 75, 13},
{51, 37, 81}}
Output:
12 33 58
33 75 25
58 25 81

Approach: The given problem is an implementation-based problem. The idea is to traverse the lower triangular matrix and replace the elements and their respective transpose indices with their arithmetic mean

Below is the implementation of the above approach:

## C++

 `// C++ program of the above approach``#include ``using` `namespace` `std;``const` `int` `N = 3;` `// Function to convert the given matrix``// into a symmetric matrix by replacing``// transpose elements with their mean``void` `makeSymmetric(``int` `mat[][N])``{``    ``// Loop to traverse lower triangular``    ``// elements of the given matrix``    ``for` `(``int` `i = 0; i < N; i++) {``        ``for` `(``int` `j = 0; j < N; j++) {``            ``if` `(j < i) {``                ``mat[i][j] = mat[j][i]``                    ``= (mat[i][j] +``                       ``mat[j][i]) / 2;``            ``}``        ``}``    ``}``}` `// Function to print the given matrix``void` `showMatrix(``int` `mat[][N])``{``    ``// Loop to traverse the``    ``// given matrix``    ``for` `(``int` `i = 0; i < N; i++) {``        ``for` `(``int` `j = 0; j < N; j++) {` `            ``// Print current index``            ``cout << mat[i][j] << ``" "``;``        ``}``        ``cout << ``"\n"``;``    ``}``}` `// Driver Code``int` `main()``{``    ``int` `arr[][N]``        ``= { { 12, 43, 65 },``            ``{ 23, 75, 13 },``            ``{ 51, 37, 81 } };` `    ``makeSymmetric(arr);``    ``showMatrix(arr);` `    ``return` `0;``}`

## Java

 `// Java program of the above approach``import` `java.util.*;` `class` `GFG{` `static` `int` `N = ``3``;` `// Function to convert the given matrix``// into a symmetric matrix by replacing``// transpose elements with their mean``static` `void` `makeSymmetric(``int` `mat[][])``{``    ` `    ``// Loop to traverse lower triangular``    ``// elements of the given matrix``    ``for``(``int` `i = ``0``; i < N; i++)``    ``{``        ``for``(``int` `j = ``0``; j < N; j++)``        ``{``            ``if` `(j < i)``            ``{``                ``mat[i][j] = mat[j][i] = (mat[i][j] +``                                         ``mat[j][i]) / ``2``;``            ``}``        ``}``    ``}``}` `// Function to print the given matrix``static` `void` `showMatrix(``int` `mat[][])``{``    ` `    ``// Loop to traverse the``    ``// given matrix``    ``for``(``int` `i = ``0``; i < N; i++)``    ``{``        ``for``(``int` `j = ``0``; j < N; j++)``        ``{``            ` `            ``// Print current index``            ``System.out.print(mat[i][j] + ``" "``);``        ``}``        ``System.out.println();``    ``}``}` `// Driver Code``public` `static` `void` `main(String args[])``{``    ``int` `arr[][] = { { ``12``, ``43``, ``65` `},``                    ``{ ``23``, ``75``, ``13` `},``                    ``{ ``51``, ``37``, ``81` `} };` `    ``makeSymmetric(arr);``    ``showMatrix(arr);``}``}` `// This code is contributed by sanjoy_62`

## Python3

 `# python3 program of the above approach``N ``=` `3` `# Function to convert the given matrix``# into a symmetric matrix by replacing``# transpose elements with their mean``def` `makeSymmetric(mat):` `    ``# Loop to traverse lower triangular``    ``# elements of the given matrix``    ``for` `i ``in` `range``(``0``, N):``        ``for` `j ``in` `range``(``0``, N):``            ``if` `(j < i):``                ``mat[i][j] ``=` `mat[j][i] ``=` `(mat[i][j] ``+``                                         ``mat[j][i]) ``/``/` `2` `# Function to print the given matrix``def` `showMatrix(mat):` `    ``# Loop to traverse the``    ``# given matrix``    ``for` `i ``in` `range``(``0``, N):``        ``for` `j ``in` `range``(``0``, N):` `            ``# Print current index``            ``print``(mat[i][j], end``=``" "``)` `        ``print``()` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``arr ``=` `[[``12``, ``43``, ``65``],``           ``[``23``, ``75``, ``13``],``           ``[``51``, ``37``, ``81``]]` `    ``makeSymmetric(arr)``    ``showMatrix(arr)` `# This code is contributed by rakeshsahni`

## C#

 `// C# program of the above approach``using` `System;``public` `class` `GFG``{` `  ``static` `int` `N = 3;` `  ``// Function to convert the given matrix``  ``// into a symmetric matrix by replacing``  ``// transpose elements with their mean``  ``static` `void` `makeSymmetric(``int` `[,]mat)``  ``{` `    ``// Loop to traverse lower triangular``    ``// elements of the given matrix``    ``for``(``int` `i = 0; i < N; i++)``    ``{``      ``for``(``int` `j = 0; j < N; j++)``      ``{``        ``if` `(j < i)``        ``{``          ``mat[i,j] = mat[j,i] = (mat[i,j] +``                                 ``mat[j,i]) / 2;``        ``}``      ``}``    ``}``  ``}` `  ``// Function to print the given matrix``  ``static` `void` `showMatrix(``int` `[,]mat)``  ``{` `    ``// Loop to traverse the``    ``// given matrix``    ``for``(``int` `i = 0; i < N; i++)``    ``{``      ``for``(``int` `j = 0; j < N; j++)``      ``{` `        ``// Print current index``        ``Console.Write(mat[i, j] + ``" "``);``      ``}``      ``Console.WriteLine();``    ``}``  ``}` `  ``// Driver Code``  ``public` `static` `void` `Main(String []args)``  ``{``    ``int` `[,]arr = { { 12, 43, 65 },``                  ``{ 23, 75, 13 },``                  ``{ 51, 37, 81 } };` `    ``makeSymmetric(arr);``    ``showMatrix(arr);``  ``}``}``// This code is contributed by 29AjayKumar`

## Javascript

 `  ```
Output
```12 33 58
33 75 25
58 25 81 ```

Time complexity: O(N2)
Space complexity: O(1)

My Personal Notes arrow_drop_up