幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。
输入格式:
"%d"
输出格式:
如果是幻方矩阵,屏幕输出——
"It is a magic square!\n"
矩阵元素的输出: "%4d"(换行使用"\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!
**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
(输出样例中“*”代表空格)
输入样例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>
const int MAX = 5;
int Fun(int a[][MAX]);
int main()
{
int a[MAX][MAX] ;
for (int i = 0; i < MAX; i++)
for (int j = 0; j < MAX; j++)
scanf("%d ", &a[i][j]);
if (Fun(a) == 1)
{
printf("It is a magic square!\n");
for (int i = 0; i<MAX; i++)
{
for (int j = 0; j < MAX; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
else
printf("It is not a magic square!\n");
return 0;
}
int Fun(int a[][MAX])
{
int s1, s2, sum;
sum = 0;
for (int i = 0; i<MAX; i++)
for (int j = 0; j<MAX; j++)
sum += a[i][j];
sum /= MAX;
for (int i = 0; i<MAX; i++)
{
s1 = s2 = 0;
for (int j = 0; j<MAX; j++)//判断每一行每一列
{
s1 += a[i][j];
s2 += a[j][i];
}
if (s1 != sum || s2 != sum)
{
return 0;
}
}
s1 = s2 = 0;
for (int i = 0; i<MAX; i++)//判断每一撇:主对角线
{
s1 += a[i][i];
s2 += a[i][MAX - i - 1];
}
if (s1 != sum || s2 != sum)
return 0;
return 1;
}