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

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 53 5 75 7 9Explanation: 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 5833 75 2558 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++
Java
Python3
C#
Javascript
// C++ program of the above approach#include <iostream>using namespace std;const int N = 3; // Function to convert the given matrix// into a symmetric matrix by replacing// transpose elements with their meanvoid 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 matrixvoid 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 Codeint main(){    int arr[][N]        = { { 12, 43, 65 },            { 23, 75, 13 },            { 51, 37, 81 } };     makeSymmetric(arr);    showMatrix(arr);     return 0;}
// Java program of the above approachimport java.util.*; class GFG{ static int N = 3; // Function to convert the given matrix// into a symmetric matrix by replacing// transpose elements with their meanstatic 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 matrixstatic 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 Codepublic 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 program of the above approachN = 3 # Function to convert the given matrix# into a symmetric matrix by replacing# transpose elements with their meandef 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 matrixdef 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 Codeif __name__ == "__main__":     arr = [[12, 43, 65],           [23, 75, 13],           [51, 37, 81]]     makeSymmetric(arr)    showMatrix(arr) # This code is contributed by rakeshsahni
// C# program of the above approachusing 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
  <script>      // JavaScript code for the above approach      let N = 3;       // Function to convert the given matrix      // into a symmetric matrix by replacing      // transpose elements with their mean      function makeSymmetric(mat)      {                 // Loop to traverse lower triangular          // elements of the given matrix          for (let i = 0; i < N; i++) {              for (let j = 0; j < N; j++) {                  if (j < i) {                      mat[i][j] = mat[j][i]                          = Math.floor((mat[i][j] +                              mat[j][i]) / 2);                  }              }          }      }       // Function to print the given matrix      function showMatrix(mat)      {                 // Loop to traverse the          // given matrix          for (let i = 0; i < N; i++) {              for (let j = 0; j < N; j++) {                   // Print current index                  document.write(mat[i][j] + " ");              }              document.write('<br>')          }      }       // Driver Code      let arr = [[12, 43, 65],          [23, 75, 13],          [51, 37, 81]];       makeSymmetric(arr);      showMatrix(arr);       // This code is contributed by Potta Lokesh  </script>
12 33 58 
33 75 25 
58 25 81 
Time complexity: O(N2)Space complexity: O(1)
 
sanjoy_62
lokeshpotta20
shikhasingrajput
rakeshsahni
nikhatkhan11
Algo-Geek 2021
maths-mean
Algo Geek
Mathematical
Matrix
Mathematical
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.