检验并打印幻方矩阵。在下面的5×5阶幻方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将下面这个矩阵中的元素存储到一个二维整型数组中,然后检验其是否为幻方矩阵,并将其按如下格式显示到屏幕上。
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
输出格式:
如果是幻方矩阵,输出提示信息: "It is a magic square!\n",并输出矩阵元素,输出格式为: "%4d"(换行使用"\n")
如果不是幻方矩阵,输出提示信息: "It is not a magic square!\n" (不输出矩阵元素)
#include <stdio.h>
#define N 5
int main()
{
int a[N][N] = {{17, 24, 1, 8, 15},{23, 5, 7, 14, 16},{4, 6, 13, 20, 22},{10, 12, 19, 21, 3},{11, 18, 25, 2, 9}};
int isMagic = 1;
int h,s,x;
int sumh[N],sums[N],diagSum1,diagSum2;
for(h=0;h<N;h++)
{
sumh[h] = 0;
for(s=0;s<N;s++)
{
sumh[h] = sumh[h] + a[h][s];
}
}
for(s=0;s<N;s++)
{
sums[s] = 0;
for(h=0;h<N;h++)
{
sums[s] = sums[s] + a[h][s];
}
}
diagSum1 = 0;
for(s=0;s<N;s++)
{
diagSum1 = diagSum1 + a[s][s];
}
diagSum2 = 0;
for(s=0;s<N;s++)
{
diagSum2 = diagSum2 + a[s][N-1-s];
}
if(diagSum1!=diagSum2)
{
isMagic = 0;
}
else
{
for(h=0;h<N;h++)
{
if((sumh[h]!=diagSum1)||(sums[h]!=diagSum1))
isMagic = 0;
}
}
if(isMagic)
{
printf("It is a magic square!\n");
for(h=0;h<N;h++)
{
for(s=0;s<N;s++)
{
printf("%4d",a[h][s]);
}
printf("\n");
}
}
else
{
printf("It is not a magic square!\n");
}
return 0;
}