Untitled
unknown
c_cpp
2 years ago
1.5 kB
5
Indexable
#include <iostream>
/*
Дана квадратная матрица nxn. Проверить, является ли
данная матрица магическим квадратом
*/
int** createMatrix(int n) {
int** a = new int*[n];
for (int i = 0; i < n; i++)
a[i] = new int[n];
return a;
}
void fillMatrix (int** a, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n ; j++) {
scanf_s("%d", &a[i][j]);
}
}
}
int sumOnIStr(int** a, int i, int n) {
int sum = 0;
for (int j = 0; j < n; j++) {
sum += a[i][j];
}
return sum;
}
int sumOnICol(int** a, int i, int n) {
int sum = 0;
for (int j = 0; j < n; j++) {
sum += a[j][i];
}
return sum;
}
int sumOnMainDiag(int** a, int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += a[i][i];
}
return sum;
}
int sumOnSideDiag(int** a, int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += a[i][n - i - 1];
}
return sum;
}
bool isMagicSquare(int** a, int n) {
int ref = sumOnIStr(a, 0, n);
if ((sumOnMainDiag(a, n) != ref ) || (sumOnSideDiag(a, n) != ref))
return false;
for (int i = 0; i < n; i++) {
if ((sumOnIStr(a, i, n) != ref) || sumOnICol(a, i, n) != ref) {
return false;
}
}
return true;
}
int main() {
int n;
printf("Type n:\n");
scanf_s("%d", &n);
int** matr = createMatrix(n);
printf("Fill The matrix:\n");
fillMatrix(matr, n);
if(isMagicSquare(matr, n))
printf("Your matrix is a Magic Square.\n");
else
printf("Not a Magic Square.\n");
return 0;
}Editor is loading...
Leave a Comment