题目内容:
幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。
输入格式: “%d”
输出格式:
如果是幻方矩阵,输出提示信息: “It is a magic square!\n”
矩阵元素的输出: “%4d”(换行使用"\n")
如果不是幻方矩阵,输出提示信息: “It is not a magic square!\n”
输入样例1:
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
(输人样例中“_”代表空格)
输出样例1:
It is a magic square!
1724***1*815
23571416
46132022
10121921***3
111825*2***9
(输出样例中“*”代表空格)
输入样例2:
1_0_1_6_1
3_1_1_1_1
1_1_1_1_2
1_1_1_1_1
9_1_7_1_1
(输人样例中“_”代表空格)
输出样例2:
It is not a magic square!
#include<stdio.h>
#define N 5
void input(int a[][N]);
int magic(int a[][N]);
void output(int a[][N]);
int main()
{
int a[N][N],n;
input(a);
n=magic(a);
if(n==1)
output(a);
}
void input(int a[][N]) //输入一个数组
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
}
}
int magic(int a[][N]) //检测是否为幻方矩阵
{
int i,j,k=0,n=0,s,l=0,q=0,sum=0;
int b[N],c[N];
for(i=0;i<N;i++)
{
sum=0;
for(j=0;j<N;j++)
{
sum+=a[i][j];
}
b[i]=sum; //将每一行的所有数之和存到一个数组里
}
if(b[1]==b[2]&&b[2]==b[3]&&b[3]==b[4]&&b[1]==b[0])
k++; //如果每一行的数字和相等k加1
for(j=0;j<N;j++)
{
sum=0;
for(i=0;i<N;i++)
{
sum+=a[i][j];
}
c[j]=sum; //将每一列的数字和存进一个数组里
}
if(c[1]==c[2]&&c[2]==c[3]&&c[3]==c[4]&&c[1]==c[0])
k++;
for(s=0;s<N;s++)
{
n+=a[s][s];
l+=a[N-1-s][N-1-s]; //n,l代表两个对角线的数字和
}
if(n==l) k++;
if(k==3)
{
if(b[0]==c[0]&&b[0]==n)
{
printf("It is a magic square!\n");
return 1;
}
else
printf("It is not a magic square!\n");
}
else
printf("It is not a magic square!\n");
}
void output(int a[][N]) //输出数组
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}