检验并打印幻方矩阵

题目内容:

幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。

输入格式: "%d"

输出格式:

如果是幻方矩阵,输出提示信息: "It is a magic square! "

矩阵元素的输出: "%4d"(换行使用" ")

如果不是幻方矩阵,输出提示信息: "It is not a magic square! "

输入样例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!

注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

(输人样例中“_”代表空格,输出样例中“*”代表空格)

时间限制:500ms内存限制:32000kb
 
 1     #include<stdio.h>  
 2       
 3     const int MAX = 5;  
 4     int Fun(int a[][MAX]);  
 5     int main()  
 6     {  
 7         int a[MAX][MAX] ;  
 8         for (int i = 0; i < MAX; i++)  
 9         for (int j = 0; j < MAX; j++)  
10             scanf("%d ", &a[i][j]);  
11           
12       
13         if (Fun(a) == 1)  
14         {  
15             printf("It is a magic square!
");  
16             for (int i = 0; i<MAX; i++)  
17             {  
18                 for (int j = 0; j < MAX; j++)  
19                     printf("%4d", a[i][j]);  
20                 printf("
");  
21             }  
22         }  
23         else  
24             printf("It is not a magic square!
");  
25       
26         return 0;  
27     }  
28     int Fun(int a[][MAX])  
29     {  
30         int s1, s2, sum;  
31       
32         sum = 0;  
33         for (int i = 0; i<MAX; i++)  
34         for (int j = 0; j<MAX; j++)  
35             sum += a[i][j];  
36       
37         sum /= MAX;  
38       
39         for (int i = 0; i<MAX; i++)  
40         {  
41             s1 = s2 = 0;  
42             for (int j = 0; j<MAX; j++)//判断每一行每一列  
43             {  
44                 s1 += a[i][j];  
45                 s2 += a[j][i];  
46             }  
47             if (s1 != sum || s2 != sum)  
48             {  
49                 return 0;  
50             }  
51         }  
52         s1 = s2 = 0;  
53         for (int i = 0; i<MAX; i++)//判断每一撇:主对角线  
54         {  
55             s1 += a[i][i];  
56             s2 += a[i][MAX - i - 1];  
57         }  
58         if (s1 != sum || s2 != sum)  
59             return 0;  
60         return 1;  
61     }  
View Code
原文地址:https://www.cnblogs.com/entrepre/p/5498251.html