Untitled

 avatar
unknown
c_cpp
a year ago
1.5 kB
2
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