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

 0 3 6 5 0 5 4 7 0

After filling, it will be −

 6 3 6 5 5 5 4 7 4

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