Вы здесь
Как определить является ли матрица "магическим квадратом"?
Здраствуйте!
Задали в универе написать программу на языке C++ которая определяет, является ли введеная матрица магическим квадратом. Вот задание:
Объявить массив данных типа int размером 3 на 3. Ввести с консоли его значения. Проверить, является ли матрица «магическим квадратом» (в «магическом квадрате» суммы элементов по вертикали, горизонтали и диагонали равны).
Можете помочь с решением. Спасибо.
Приветствую!
Решений по вашему заданию множество. Можно найти сумму элементов каждой строки, какждого столбца и диагоналей (основная и побочная) и сравнить каждую сумму. Но это длинноватый метод. Проще решить следующим образом...
1. Расчитать так называемую "магическую константу". Рассчитывается она по формуле: n*(n^2+1)/2, где n - является размерностью матрицы-квадрата.
2. Сложить все элементы квадратной матрицы и разделить на n т.е. размерность
3. Сравнить полученный результат с "магической константой".
На языке C++ в консольном приложении реализация будет следующая:
#include <iostream>
#include <conio.h>
#include <locale> //Библиотека для включения поддержки русского языка в консоли
using namespace std;
int main()
{
const int n=3;//размерность квадратной матрицы
setlocale(LC_ALL,"Russian"); //включаем поддержку русского языка
int a[n][n];
int sum=0;
for(int i = 0; i <n; i++)
{
for(int j =0; j <n; j++)
{
std::cout << " Введите элемент матрицы " << i << ":" << j << " - ";
std::cin >> a[i][j];
}
}
for (int i = 0; i < n; i++)
{
for(int j =0; j <n; j++)
{
sum += a[i][j]; //складываем все элементы
}
}
int M = (n*(n*n+1))/2; //магическая константа
// если разделить всю сумму элементов на размерность квадрата то получим число являющееся суммой диагоналей sum/n
// если полученное число от деления будет равняться константе, то значит матрица магическая
if (M == (sum/n)) {
printf("Матрица магическая\n");
}
else {
printf("Матрица не магическая!\n");
}
std::cout << "Магическая константа М " << n << "-порядка равна " << M;
_getch(); //Приостанавливаем приложение и ожидаем нажатие любой клавиши
return 0;
}
Вот собственно и все решение.