Fill missing entries of a magic square
Last Updated :
09 Sep, 2022
Given a 3X3 matrix mat with it’s left diagonal elements missing (set to 0), considering the sum of every row, column and diagonal of the original matrix was equal, the task is to find the missing diagonal elements and print the original matrix.
Examples:
Input: mat[][] = {{0, 7, 6}, {9, 0, 1}, {4, 3, 0}}
Output:
2 7 6
9 5 1
4 3 8
Row sum = Column sum = Diagonal sum = 15
Input: mat[][] = {{0, 1, 1}, {1, 0, 1}, {1, 1, 0}}
Output:
1 1 1
1 1 1
1 1 1
Approach: Let Sum denote the total sum excluding the diagonal elements,
Sum = total sum of the given matrix – diagonalSum
Sum = (3 * rowSum) – diagonalSum
Sum = (2 * rowSum) [Since, columnSum = rowSum = diagonalSum]
rowSum = Sum / 2
Hence, we can insert an element in every row such that the sum of the row is rowSum
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int printFilledDiagonal( int sq[][3])
{
int sum = 0;
for ( int i = 0; i < 3; i++)
for ( int j = 0; j < 3; j++)
sum += sq[i][j];
sum /= 2;
for ( int i = 0; i < 3; i++) {
int rowSum = 0;
for ( int j = 0; j < 3; j++)
rowSum += sq[i][j];
sq[i][i] = sum - rowSum;
}
for ( int i = 0; i < 3; i++) {
for ( int j = 0; j < 3; j++)
cout << sq[i][j] << " " ;
cout << endl;
}
}
int main()
{
int sq[3][3] = {
{ 0, 7, 6 },
{ 9, 0, 1 },
{ 4, 3, 0 }
};
printFilledDiagonal(sq);
return 0;
}
|
Java
import java.io.*;
class GFG {
static int printFilledDiagonal( int sq[][])
{
int sum = 0 ;
for ( int i = 0 ; i < 3 ; i++)
for ( int j = 0 ; j < 3 ; j++)
sum += sq[i][j];
sum /= 2 ;
for ( int i = 0 ; i < 3 ; i++) {
int rowSum = 0 ;
for ( int j = 0 ; j < 3 ; j++)
rowSum += sq[i][j];
sq[i][i] = sum - rowSum;
}
for ( int i = 0 ; i < 3 ; i++) {
for ( int j = 0 ; j < 3 ; j++)
System.out.print( sq[i][j] + " " );
System.out.println();
}
return 0 ;
}
public static void main (String[] args) {
int sq[][] = {
{ 0 , 7 , 6 },
{ 9 , 0 , 1 },
{ 4 , 3 , 0 }
};
printFilledDiagonal(sq);
}
}
|
Python3
def printFilledDiagonal(sq):
Sum = 0
for i in range ( 0 , 3 ):
for j in range ( 0 , 3 ):
Sum + = sq[i][j]
Sum = Sum / / 2
for i in range ( 0 , 3 ):
rowSum = 0
for j in range ( 0 , 3 ):
rowSum + = sq[i][j]
sq[i][i] = Sum - rowSum
for i in range ( 0 , 3 ):
for j in range ( 0 , 3 ):
print (sq[i][j], end = " " )
print ()
if __name__ = = "__main__" :
sq = [[ 0 , 7 , 6 ],
[ 9 , 0 , 1 ],
[ 4 , 3 , 0 ]]
printFilledDiagonal(sq)
|
C#
using System;
class GFG {
static int printFilledDiagonal( int [,]sq)
{
int sum = 0;
for ( int i = 0; i < 3; i++)
for ( int j = 0; j < 3; j++)
sum += sq[i,j];
sum /= 2;
for ( int i = 0; i < 3; i++) {
int rowSum = 0;
for ( int j = 0; j < 3; j++)
rowSum += sq[i,j];
sq[i,i] = sum - rowSum;
}
for ( int i = 0; i < 3; i++) {
for ( int j = 0; j < 3; j++)
Console.Write( sq[i,j] + " " );
Console.WriteLine();
}
return 0;
}
public static void Main () {
int [,]sq = {
{ 0, 7, 6 },
{ 9, 0, 1 },
{ 4, 3, 0 }
};
printFilledDiagonal(sq);
}
}
|
PHP
<?php
function printFilledDiagonal( $sq )
{
$sum = 0;
for ( $i = 0; $i < 3; $i ++)
for ( $j = 0; $j < 3; $j ++)
$sum += $sq [ $i ][ $j ];
$sum = (int)( $sum / 2);
for ( $i = 0; $i < 3; $i ++)
{
$rowSum = 0;
for ( $j = 0; $j < 3; $j ++)
$rowSum += $sq [ $i ][ $j ];
$sq [ $i ][ $i ] = $sum - $rowSum ;
}
for ( $i = 0; $i < 3; $i ++)
{
for ( $j = 0; $j < 3; $j ++)
echo $sq [ $i ][ $j ] . " " ;
echo "\n" ;
}
}
$sq = array ( array (0, 7, 6),
array (9, 0, 1),
array (4, 3, 0));
printFilledDiagonal( $sq );
?>
|
Javascript
<script>
function printFilledDiagonal(sq)
{
let sum = 0;
for (let i = 0; i < 3; i++)
for (let j = 0; j < 3; j++)
sum += sq[i][j];
sum /= 2;
for (let i = 0; i < 3; i++) {
let rowSum = 0;
for (let j = 0; j < 3; j++)
rowSum += sq[i][j];
sq[i][i] = sum - rowSum;
}
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++)
document.write(sq[i][j] + " " );
document.write( "</br>" );
}
return 0;
}
let sq = [
[ 0, 7, 6 ],
[ 9, 0, 1 ],
[ 4, 3, 0 ]
];
printFilledDiagonal(sq);
</script>
|
Share your thoughts in the comments
Please Login to comment...