Fill missing entries of a magic square in C++


Suppose we have one 3x3 matrix, whose diagonal elements are empty at first. We have to fill the diagonal such that the sum of row, column and the diagonal will be same. Suppose a matrix is like −

036
505
470

After filling, it will be −

636
555
474

Suppose the diagonal elements are x, y, z. The values will be −

  • x = (M[2, 3] + M[3, 2])/ 2
  • z = (M[1, 2] + M[2, 1])/ 2
  • y = (x + z)/2

Example

 Live Demo

#include<iostream>
using namespace std;
void displayMatrix(int matrix[3][3]) {
   for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++)
         cout << matrix[i][j] << " ";
         cout << endl;
   }
}
void fillDiagonal(int matrix[3][3]) {
   matrix[0][0] = (matrix[1][2] + matrix[2][1]) / 2;
   matrix[2][2] = (matrix[0][1] + matrix[1][0]) / 2;
   matrix[1][1] = (matrix[0][0] + matrix[2][2]) / 2;
   cout << "Final Matrix" << endl;
   displayMatrix(matrix);
}
int main() {
   int matrix[3][3] = {{ 0, 7, 6 },
   { 9, 0, 1 },
   { 4, 3, 0 }};
   cout << "Given Matrix" << endl;
   displayMatrix(matrix);
   fillDiagonal(matrix);
}

Output

Given Matrix
0 7 6
9 0 1
4 3 0
Final Matrix
2 7 6
9 5 1
4 3 8

Updated on: 24-Oct-2019

161 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements