Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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 <iostream>
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




  <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>


Output

12 33 58 
33 75 25 
58 25 81 

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

 



Last Updated : 07 Mar, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads