幻方矩阵要求每行、每列、主对角线及反对角线上元素之和都相等
#include<stdio.h>
#include<math.h>
#include<string.h>
int fun(int a[3][3])
{ int i,j,m1=0,m2=0;//m1是主对角线,m2是反对角线
int row=0,lie=0;// row 是每行的值,lie是每列的值
for(i=0; i<N; i++)
{ j=N-i-1;
m1+=a[i][i];
m2+=a[i][j];
}
if(m1!=m2) //主对角线和反对角线不相等,不是幻方
return 0;
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
row+=a[i][j];
lie+=a[j][i];
}
if((row!=lie)||(row!=m1))
return 0;
}
return 1;
}
int main()
{
int i,j;
int x[3][3];
for(i=0; i<3; i++)
for(j=0; j<3; j++)
scanf("%d",&x[i][j]);
printf("矩阵为");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
printf("%3d",x[i][j]);
printf("\n");
}
if(fun(x)) //调用函数fun
printf("是幻方矩阵\n");
else
printf("不是幻方矩阵");
}