Проверьте:
Code
#include <conio.h>
#include <iostream.h>
int n, i, j, summa, stolb = 0;
bool k = true;
cout<<" Порядок матрицы n = ";
cin>>n;
//динамическое выделение памяти
int **a=new int *[n];
for(int i=0;i<n;i++)
a[i]=new int[n];
if(!a) //проверка факта выделения памяти
{
cout<<"\nНедостаточно памяти";
cout<<"\nНажмите любую клавишу для завершения программы ...\n";
getch();
return 0;
}
//ввод массива
cout<<"\nВведите массив["<<n<<"]["<<n<<"]\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
//вывод массива
for(i=0;i<n;i++)
{
cout<<"\n";
for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
}
//проверяем числа в массиве,они не должны превышать n*n
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j] > n*n)
{
cout<<"\nКвадрат не является магическим";
k = false;//определяет результат проверки одного из условий магического квадрата
break;
}
}
}
//если предыдущее условие истино,считаем сумму в первом столбце
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
stolb = stolb + a[i][j];
break;
}
//сравниваем суммы в других столбцах
if(k)
{
for(i=0;i<n;i++)
{
summa = 0;
for(j=0;j<n;j++)
summa = summa + a[i][j];
if(summa != stolb)
{
cout<<"\nКвадрат не является магическим";
k = false;
break;
}
}
}
//сравниваем суммы в строках
if(k)
{
for(j=0;j<n;j++)
{
summa = 0;
for(i=0;i<n;i++)
summa = summa + a[i][j];
if(summa != stolb)
{
cout<<"\nКвадрат не является магическим";
k = false;
break;
}
}
}
//если все условия выполнились, сообщаем об этом
if(k)
cout<<"\nКвадрат является магическим";
С диагоналями сами подумайте.