БлогNot. Проверка матрицы на магический квадрат

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

Проверка матрицы на магический квадрат

Дана целочисленная квадратная матрица a размерности n. Определить, является ли она магическим квадратом, то есть, такой, в которой суммы элементов во всех строках, столбцах и на обеих диагоналях одинаковы. Все данные вводятся с консоли.

На самом деле магический квадрат должен ещё и состоять из элементов со значениями 1,2,...,n2, а по нашему определению "магична", например, и матрица из всех одинаковых элементов. Тем не менее, вот простейший учебный код для этой задачи.

#include <iostream>
using namespace std;

int main () {
 int n,i,j,result,sum,sum0;
 int **a;
 //Ввод допустимой размерности матрицы
 do {
  cout << "Input matrix size (from 2 till 100) ";
  cin >>n;
  if (n>1 && n<=100) break;
 } while (1);
 //Выделение памяти
 a = new int * [n];
 for (i=0; i<n; i++) a[i] = new int [n];
 //Поэлементный ввод данных
 for (i=0; i<n; i++) for (j=0; j<n; j++) {
  cout << "Input a[" << i << "," << j << "]=";
  cin >> a[i][j];
 }
 result = 1;
 //Контрольная сумма элементов первой строки
 sum0 = 0;
 for (j=0; j<n; j++) sum0 += a[0][j];
 //Суммы по строкам
 for (i=1; i<n; i++) {
  sum = 0;
  for (j=0; j<n; j++) sum += a[i][j];
  if (sum != sum0) { result = 0; break; }
 }
 //Суммы по столбцам
 if (result) {
  for (j=0; j<n; j++) {
   sum = 0;
   for (i=0; i<n; i++) sum += a[i][j];
   if (sum != sum0) { result = 0; break; }
  }
 }
 //Главная диагональ
 if (result) {
  sum = 0;
  for (i=0; i<n; i++) sum += a[i][i];
  if (sum != sum0) result = 0; 
 }  
 //Побочная диагональ
 if (result) {
  sum = 0;
  for (i=0; i<n; i++) sum += a[i][n-1-i];
  if (sum != sum0) result = 0; 
 }
 //Вывод
 cout << (result == 1 ? "Yes" : "No");
 system ("pause>nul"); return 0;
}

теги: числа c++ алгоритм

13.07.2014, 23:54; рейтинг: 9216

  свежие записипоиск по блогукомментариистатистикао "вирусах" в архивах .zip

Наверх Яндекс.Метрика
© PerS
вход