Группы и рассылки:

Вы здесь

Как определить является ли матрица "магическим квадратом"?

Вопрос №: 
2

Здраствуйте!

Задали в универе написать программу на языке C++ которая определяет, является ли введеная матрица магическим квадратом. Вот задание:

Объявить массив данных типа int размером 3 на 3. Ввести с консоли его значения. Проверить, является ли матрица «магическим квадратом» (в «магическом квадрате» суммы элементов по вертикали, горизонтали и диагонали равны).

Можете помочь с решением. Спасибо.

Ответ: 

Приветствую!

Решений по вашему заданию множество. Можно найти сумму элементов каждой строки, какждого столбца и диагоналей (основная и побочная) и сравнить каждую сумму. Но это длинноватый метод. Проще решить следующим образом...

1. Расчитать так называемую "магическую константу". Рассчитывается она по формуле: n*(n^2+1)/2, где n - является размерностью матрицы-квадрата.
2. Сложить все элементы квадратной матрицы и разделить на n т.е. размерность
3. Сравнить полученный результат с "магической константой".

На языке C++ в консольном приложении реализация будет следующая:

#include "stdafx.h"
#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;
}

Вот собственно и все решение.

Разместить свое видео на сайте
Вы можете разместить свои 
видео-уроки на сайте
БЕСПЛАТНО!


Подробнее>>>