数学趣题——魔幻方阵
问题:
在n*n的矩阵中填写1~n*n这n*n个数字。使得它的每一行、每一列以及两个对角线之和均相等。求出一个这样的三阶魔幻方阵
最简单,效率最低的穷举法可以解。
源码:
1: #include <stdio.h>
2:
3: int match(int i,int j,int k,int l,int m,int n,int o,int p,int q)
4: {
5: /*判断变量i-q是否互不相等,是则返回1,不是则返回0*/
6: if(i!=j&&i!=k&&i!=l&&i!=m&&i!=n&&i!=o&&i!=p&&i!=q
7: &&j!=k&&j!=l&&j!=m&&j!=n&&j!=o&&j!=p&&j!=q
8: &&k!=l&&k!=m&&k!=n&&k!=o&&k!=p&&i!=q
9: &&l!=m&&l!=n&&l!=o&&l!=p&&l!=q
10: &&m!=n&&m!=o&&m!=p&&m!=q
11: &&n!=o&&n!=p&&n!=q
12: &&o!=p&&o!=q
13: &&p!=q)
14: return 1 ;
15: else return 0;
16: }
17:
18:
19: int justic(int i,int j,int k,int l,int m,int n,int o,int p,int q)
20: {
21: /*判断变量i-q的这种排列是否满足魔幻方阵的要求,满足返回1,不满足返回0*/
22: if(i+j+k == l+m+n && i+j+k == o+p+q &&
23: i+l+o == j+m+p && i+l+o == k+n+q
24: && i+m+q == k+m+o)return 1;
25: else return 0;
26: }
27:
28: void getMatrix(){
29: int i,j,k,l,m,n,o,p,q;
30: for(i=1;i<=9;i++)
31: for(j=1;j<=9;j++)
32: for(k=1;k<=9;k++)
33: for(l=1;l<=9;l++)
34: for(m=1;m<=9;m++)
35: for(n=1;n<=9;n++)
36: for(o=1;o<=9;o++)
37: for(p=1;p<=9;p++)
38: for(q=1;q<=9;q++)
39: {
40: if(match(i,j,k,l,m,n,o,p,q))
41: if(justic(i,j,k,l,m,n,o,p,q))
42: {
43: printf("%d %d %d\n",i,j,k); /*输出结果*/
44: printf("%d %d %d\n",l,m,n);
45: printf("%d %d %d\n",o,p,q);
46: printf("\n");
47: return;
48: } /*返回*/
49: }
50:
51: }
52:
53: int main()
54: {
55: getMatrix() ; /*输出一个三阶魔幻方阵*/
56: return 0;
57: }
58: