题目大意:
判断一个矩阵是不是magic square
解题思路:
把每行、每列以及斜对角元素加起来,保存到sum数组中,然后判断sum元素是否都相等。此外,还要判断矩阵元素是否有重复
代码如下:
#include<stdio.h>
int main()
{
int n,a[15][15],sum[25],i,j,b=0,leap=0;
while((scanf("%d",&n)==1)&&(n!=0))
{
leap=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
b=b+a[i][j];
}
sum[i]=b;
b=0;
}
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
b=b+a[i][j];
}
sum[j+n]=b;
b=0;
}
for(i=0;i<n;i++)
{
b=b+a[i][i];
}
sum[2*n]=b;
b=0;
for(i=0;i<n;i++)
{
b=b+a[i][n-1-i];
}
sum[2*n+1]=b;
b=0;
for(i=0;i<=(2*n+1);i++)
{
for(j=0;j<i;j++)
{
if(sum[i]!=sum[j])
{
leap=1;
break;
}
}
}
for(i=0;i<n*n;i++)
{
for(j=0;j<i;j++)
{
if(a[i/n][i%n]==a[j/n][j%n])
{
leap=1;
break;
}
}
}
if(leap==0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}